【发布时间】:2012-03-11 15:00:45
【问题描述】:
我有一个 16GB 物理内存并运行一些应用程序的 linux 硬件服务器。到目前为止,该服务器已启动并运行了大约 365 天,我观察到“free -m”显示内存不足。
total used free shared buffers cached
Mem: 14966 13451 1515 0 234 237
-/+ buffers/cache: 12979 1987
Swap: 4094 367 3727
据我了解,1987 年是系统中的实际可用内存不到 14%。如果我在“ps -A v”输出中或从“top”中添加 %MEM 部分,它的总和不会达到 100%。
我需要了解为什么内存这么低?
更新(2012 年 2 月 29 日):
让我把这个问题分成两部分:
1) 系统的可用内存较少。
2) 确定已用内存的去向。
对于 1),我理解;如果系统的可用内存不足,我们可能会看到性能逐渐下降。在某些时候,分页会为系统提供额外的空闲内存,从而恢复系统的性能。如果我错了,请纠正我。
对于 2),现在这就是我想了解的已用内存在哪里消失了。如果我总结“ps -A v”或“top -n 1 -b”的输出中的 %MEM,它不会超过 50%。那么剩下的 40% 的不可追踪内存在哪里占。我们在服务器中有自己的内核模块。如果这些模块泄漏内存,它们会被计入帐内。是否可以知道内核模块中的泄漏量。
【问题讨论】:
-
这台服务器上正在运行什么,可能是内存泄漏服务器,或者只是一个需要内存的重度使用的数据库,linux即使只有100Mo内存也能顺利运行,你不应该惊慌。尝试观察 top 命令的结果
-
我也在观察 top 命令的输出。但这并没有多大帮助。有一个进程占用1.9G左右内存;但即使系统刚刚启动也是如此。
-
1)是绝对错误的,并且是一种常见的误解。在所有其他条件相同的情况下,可用内存越低,使用的内存就越高。使用更多内存提高性能,这就是我们向系统添加内存以使其更快的原因。
标签: linux memory system memory-leaks