我用过的记忆在哪里消失了?

Tar*_*oko 4 linux memory memory-leaks system

我有一个Linux硬件服务器,有16GB的物理内存并运行一些应用程序.到目前为止,这台服务器启动并运行了大约365天,我观察到"free -m"显示内存不足.

             total       used       free     shared    buffers     cached
Mem:         14966      13451       1515          0        234        237
-/+ buffers/cache:      12979       1987
Swap:         4094        367       3727
Run Code Online (Sandbox Code Playgroud)

据我所知,1987年系统中的实际可用内存不到14%.如果我在"ps -A v"输出中添加%MEM部分或从"top"添加,则它不会加起来为100%.

我需要理解为什么内存如此之低?

更新(2012年2月29日):
让我将这个问题分成两部分:
1)系统具有较少的可用内存.
2)识别已用内存的去向.

对于1),我理解; 如果系统在可用内存上运行不足,我们可能会看到性能逐渐下降.在某些时候,分页会为系统提供额外的空闲内存,从而恢复系统性能.如果我错了,请纠正我.

对于2),现在这就是我想要了解使用内存消失的地方.如果我总结输出"ps -A v"或"top -n 1 -b"中的%MEM,则不超过50%.那么在哪里可以解释其余40%的无法追踪的记忆.我们在服务器中有自己的内核模块.如果这些模块泄漏内存,他们会得到记录.是否可以知道内核模块中的泄漏量.

Dav*_*rtz 8

它并没有低位运行.可用内存不足.但那没关系,因为免费记忆完全没用.(可用内存是没有任何好处的内存.可用内存是一种内存,可以像在计算机中一样放在架子上.)

免费记忆很糟糕,没有任何意义.低可用内存是好的,这意味着你的系统已经找到了大部分内存的用途.

那有什么不好?如果您的系统运行缓慢,因为它没有足够的内存使用.

  • @Taroko没有明智的理由在低可用内存上触发警报.低可用内存是正常和正确的.在过度分页上触发警报可能是有意义的.如果缓存被挤压,触发警报可能是有意义的.这取决于你真正关心的是什么.(也许你关心进程是否使用了太高的内存百分比?) (2认同)

Tar*_*oko 5

我能够识别并解决我的问题.但它并非没有http://linux-mm.org/Low_On_Memory上提供的信息的帮助.

slabinfo用于dentry的内存大约为5GB.发出"sync"命令后,脏页被同步到硬盘驱动器,命令"echo 3>/proc/sys/vm/drop_caches"通过删除更多缓存释放了更多内存.

除了上述网站中的文献之外,内核还以依赖于vfs_cache_pressure(/ proc/sys/vm/vfs_cache_pressure)的速率回收内存.

感谢大家的帮助.