我正在调查 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”)是负数。这大概是一件坏事。我找到了更新内核的补丁,这些补丁显示了更有用的消息。仍然不确定这意味着什么,或者我需要做什么。
您的消息由slab allocator生成,这是 Linux 内核用来管理其自身(而不是用户空间进程)所需的内存部分的机制。它最初是由 Jeff Bonwick 为 Solaris 编写的,阅读Bonwick(94) ( PDF ) 可能最容易理解。
如果你想知道这个名字,Bonwick 在他的博客中最终揭示了它背后的故事。
当您查看 Linux 细节时,文章Anatomy of the Linux slab allocator(链接当前已失效,请参阅archive.org 获取副本)应该涵盖这一点。如果您还想了解用户空间内存的管理,Mel Gorman,Understanding the Linux Virtual Memory Manager提供了更多详细信息。
对于讲德语的读者,德语维基百科文章中有关于 slab 分配器的精彩介绍。
(链接最后检查时间为 2021-04-19)