我正在调试一个内核低内存不足的问题,并试图找出是谁使用了导致该问题的内核低内存。
以下是 meminfo 输出:
MemTotal: 16622556 kB
MemFree: 11429420 kB
Buffers: 146268 kB
Cached: 2898228 kB
RAMCached: 1213120 kB
Allowed: 4155639 Pages
Free: 2857355 Pages
Available: 3317413 Pages
SwapCached: 0 kB
Active: 3004716 kB
Inactive: 1694188 kB
HighTotal: 16045340 kB
HighFree: 11419648 kB
LowTotal: 577216 kB
LowFree: 9772 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 8 kB
Writeback: 0 kB
Mapped: 1871960 kB
Slab: 304260 kB
CommitLimit: 8311276 kB
Committed_AS: 5438236 kB
PageTables: 20956 kB
VmallocTotal: 311288 kB
VmallocUsed: 253900 kB
VmallocChunk: 48892 kB
我查看了上面输出中的以下字段:
LowTotal: 577216 kB
LowFree: 9772 kB
Slab: 304260 kB
如果我添加 /proc/slabinfo 中的内存分配,它与上面提到的 slab 内容(304kb)相匹配。
我查看了内核源代码,发现 lowfree 的计算方式为 (totalfree-highfree),与上表相符。
我想知道剩余的 263mb(lowtotal-lowfree-slab,577216-9772-304260=263184mb)低内存用在了哪里。看来 lowmem 还用于 slab 以外的用途。一旦我弄清楚除了 slab 之外还有谁在使用 lowmem,我就可以试着找出内存获取列表的位置。
基本上,我的目标是尝试找出谁在使用 570mb 的低内存。
我查看了不同的邮件组,它们解释了 meminfo 和 slabinfo 的详细信息,但我没有看到 lowmem 使用情况的详细信息。
谢谢 Sreenivas
答案1
这并不能直接回答你的问题,但我确实找到了有关/proc/meminfo
Red Hat 不久前发布的信息,这可能会有所帮助。页面在这里,标题为:技巧与窍门专题文章:/proc/meminfo 说明。
摘抄
LowFree:低内存区域的可用内存量。这是内核可以直接寻址的内存。所有内核数据结构都需要进入低内存。
所以我想知道是否有一些数据结构正在消耗您所询问的 263MB,您的数学计算似乎表明情况可能确实如此。
我也在 U&L 网站上写了一个关于内核使用了多少 RAM?,具体展示了一些工具,例如slabtop
以及一些/proc
可能有助于您彻底解决问题的附加结构。