![什么是 shrink_slab,为什么它会出现在 /var/log/messages 中?](https://linux22.com/image/586686/%E4%BB%80%E4%B9%88%E6%98%AF%20shrink_slab%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E4%BC%9A%E5%87%BA%E7%8E%B0%E5%9C%A8%20%2Fvar%2Flog%2Fmessages%20%E4%B8%AD%EF%BC%9F.png)
我正在调查 Linux 系统上的一些应用程序问题,并在最近出现问题时注意到了这一点,但距离还不够近,无法明确确定其相关性:
Jun 7 17:51:49 localhost kernel: shrink_slab: nr=-155456000
Jun 7 17:51:49 localhost kernel: shrink_slab: nr=-157859400
Jun 7 17:51:49 localhost kernel: shrink_slab: nr=-157833400
Jun 8 06:20:23 localhost kernel: shrink_slab: nr=-284172800
这是什么?谷歌搜索没有帮助,我知道这是 VM 的问题,但为什么它突然出现在 /var/log/messages 中?
编辑:我认为它之所以显示这个是因为它可以释放的页面数量(“nr”)为负数。这可能是一件坏事。我发现了针对较新内核的补丁,可以显示更有用的消息。但仍然不确定这是什么意思,或者我需要做什么。
答案1
您的消息由slab 分配器,Linux 内核用来管理其自身(而非用户空间进程)所需内存部分的机制。它最初是由 Jeff Bonwick 为 Solaris 编写的,阅读它或许是最容易理解的邦威克(106)(PDF)。
如果你对这个名字感到好奇,可以看看他的博客 Bonwick 最终揭示背后的故事。
当你查看 Linux 的具体细节时,文章Linux slab 分配器剖析(链接目前已失效,请参阅请访问 archive.org 获取副本)应该涵盖了这一点。如果你还想了解用户空间内存的管理,Mel Gorman,了解 Linux 虚拟内存管理器提供更多细节。
对于德语读者来说,德语维基百科关于 slab 分配器的文章。
(链接最后检查时间为 2021-04-19)