我有一个带有定制 Web 操作系统和大量守护进程的 NAS,它们共同形成一个系统来补充 Mobotix IP 摄像机。
最近几周,我遇到了一点问题 - 内置资源监视器显示内存使用量每天增加约 10%。一旦达到 90%,它就会停留在 +/- 1% 的范围内。
我也在计算所谓的优化内存。即删除缓冲区并添加缓存,这些内存每天保持在约 20%。
free
目前的输出:
total used free shared buffers cached
Mem: 1901072 1731036 170036 0 146228 1207360
-/+ buffers/cache: 377448 1523624
Swap: 1048572 1648 1046924
如您所见,内存几乎已满,但缓存/缓冲似乎占用了大部分内存。
我感觉这是由于某处的内存泄漏引起的,但我不确定。
我如何检测哪些进程正在填充缓冲/缓存内存?
答案1
这不是问题,Linux 应该这样做。如果你真的有内存问题,你会注意到所有东西都运行缓慢,进程被杀死OOM 杀手。
Linux 内核利用未使用的 RAM 进行磁盘缓存。这是件好事,它使一切运行得更快。这些内存仍可供任何需要它的程序使用,只有在其他地方不需要时才会用于缓存。这就是为什么要单独free
显示buffers/cache
它们,您应该将它们视为可用内存。
您的系统实际可用的内存量是free
+ buffers
+ cache
,在您发布的示例中170036 + 146228 + 1207360 = 1523624
,即约 1.5G 的可用内存。
这在RedHat 文档:
在此示例中,可用内存总量为 4040360 KB。其中 264224 KB 由进程使用,3776136 KB 可供其他应用程序使用。不要被第一行所困惑,它显示 28160KB 是免费的!如果您查看使用情况数据,您会发现大部分内存使用用于缓冲区和缓存。Linux 总是尝试使用 RAM 来加速磁盘操作,方法是将可用内存用作缓冲区(文件系统元数据)和缓存(包含文件或块设备实际内容的页面)。这有助于系统运行得更快,因为磁盘信息已经在内存中,从而节省了 I/O 操作。如果程序或应用程序(例如 Oracle)需要空间,那么 Linux 将释放缓冲区和缓存,为应用程序提供内存。如果您的系统运行一段时间,您通常会在第一行的“免费”字段下看到一个小数字。
更多信息请参见: