在几天的时间里,内存上升到 90%,然后保持在那里。那是内存泄漏吗?如何检测哪些进程使用缓存内存?

tom*_*ums 3 memory linux arch-linux

我有一个 NAS,带有一个 cutom 网络操作系统和大量运行的守护进程,它们一起形成一个系统来补充 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  
Run Code Online (Sandbox Code Playgroud)

如您所见,内存几乎已满,但缓存/缓冲似乎占用了大部分内存。

我有一种感觉,这是由于某处内存泄漏引起的,但我不确定。

如何检测哪些进程正在填充缓冲/缓存内存?

ter*_*don 5

这不是问题,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 将释放缓冲区和缓存以为应用程序提供内存。 如果您的系统运行了一段时间,您通常会在第一行的“空闲”字段下看到一个小数字。

有关更多信息,请参见此处: