我们在 128 Gb 的服务器上运行 debian 2.6.26-2-amd64 x86_64 GNU/Linux。最近它我们的可用内存变得相当低。查看 /proc/meminfo 显示 Slab 正在使用 88Gb,这被计入使用的内存中。
先感谢您
> cat /proc/meminfo
MemTotal: 132304500 kB
MemFree: 26669388 kB
Buffers: 237504 kB
Cached: 11881136 kB
SwapCached: 48 kB
Active: 5244640 kB
Inactive: 11714308 kB
SwapTotal: 5751228 kB
SwapFree: 5750436 kB
Dirty: 24 kB
Writeback: 0 kB
AnonPages: 4840256 kB
Mapped: 163968 kB
Slab: 88314840 kB
SReclaimable: 88275644 kB
SUnreclaim: 39196 kB
PageTables: 80852 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 71903476 kB
Committed_AS: 6818332 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 505724 kB
VmallocChunk: 34359231963 kB
Run Code Online (Sandbox Code Playgroud)
oos*_*hro 11
使用slabtop显示内核slab缓存信息:
slabtop
Run Code Online (Sandbox Code Playgroud)
另见“vmstat -m”:
vmstat -m
Run Code Online (Sandbox Code Playgroud)
并查看/proc/slabinfo:
cat /proc/slabinfo
Run Code Online (Sandbox Code Playgroud)
删除缓存以释放内存
sync; echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)
你肯定这是一个实际的问题:使用的RAM是不一样的不可用的RAM(请参阅本即对自由/缓存/缓存ServerFault问题),希望有记忆列为自由往往是错的反射。
Slab 不是一个特定的东西,它是内核中的内存分配器之一,特别是slab 允许内核管理非页面大小的对象(正如其他地方指出的 /proc/slabinfo 和slabtop 应该给你一些指示它目前持有什么)。可以在此处找到有关平板的更多背景信息
如果您在 Slab 下方看到 SReclaimable,则认为几乎所有由 Slab 分配的内存都可以在需要时/如果需要时回收。所以,是的,必要时将释放内存。回收的附带成本是在 CPU 周期中支付一些递延的簿记成本。
我不确定slab严格来说是否需要所有内存,在很多情况下它会保留初始化的对象供以后使用(保存初始化),其中一些是各种缓存,其中大部分可能是有益的(即效果文件系统缓存的数量是巨大的)。
如果您想控制 vmm 的行为,请查看/proc/sys/vm,特别是 min_slab_ratio 可能会感兴趣。您还可以通过 /proc/slabinfo 限制单个平板缓存(有关详细信息,请参阅ibm developerworks 文章)。尽管如此,在您开始打开 vmm 和平板之前:弄清楚您真正想要完成的工作,并对 vmm 进行一些研究以及如何对其进行调整以适应您的工作负载。通过使用 vmm 调谐旋钮,很可能巧妙地和壮观地破坏您的系统。