几天之内,内存占用率上升到 90%,然后就一直保持这个水平。这是内存泄漏吗?如何检测哪些进程使用了​​缓存内存?

几天之内,内存占用率上升到 90%,然后就一直保持这个水平。这是内存泄漏吗?如何检测哪些进程使用了​​缓存内存?

我有一个带有定制 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 将释放缓冲区和缓存,为应用程序提供内存。如果您的系统运行一段时间,您通常会在第一行的“免费”字段下看到一个小数字。

更多信息请参见:

相关内容