我有一个运行 Apache 的 Web 服务器,其中有一些有趣的内存使用数字。
从顶部看,我有以下内存信息
Mem: 11679976k total, 10917568k used, 762408k free, 384320k buffers
Swap: 4194296k total, 0k used, 4194296k free, 1103728k cached
因此,减去缓冲区和缓存,大约有 9GB 左右的内存被使用。free -m 证实了这一点。
total used free shared buffers cached
Mem: 11406 10642 763 0 375 1077
-/+ buffers/cache: 9189 2217
Swap: 4095 0 4095
这个 Web 服务器非常繁忙,因此当我们关闭 Apache 时,我们预计内存使用量会大幅下降,但是它并没有下降多少。
我如何才能找到真正占用了所有内存的东西?从关闭 Apache 后的 tops 输出来看,没有人使用太多内存。这告诉我没有人使用该内存,但系统报告它正在被使用。
由于内存耗尽,我们的几台服务器崩溃了,因此我们正尝试更好地了解发生了什么。
答案1
查看/proc/meminfo
和/proc/slabinfo
。该slabtop
命令可能有助于您理解 slabinfo 的内容。
有一些缓存会消耗内存,但不会被 top / free 归类为缓存或缓冲区。想到的是 inode 和 dentry(特别是如果您有广泛的文件系统)。