Slab 使用 88Gb 的 128Gb 可用。什么可能导致这种情况?

Jor*_*eys 8 memory debian

我们在 128 Gb 的服务器上运行 debian 2.6.26-2-amd64 x86_64 GNU/Linux。最近它我们的可用内存变得相当低。查看 /proc/meminfo 显示 Slab 正在使用 88Gb,这被计入使用的内存中。

  1. 这是一个问题吗?我怀疑在必要时会释放内存,但我不知道这是否会产生不必要的副作用。
  2. 为什么 Slab 需要那么多内存?有明确的原因吗?
  3. 我们可以避免这种情况在未来发生吗?
  4. 我们如何释放这些内存?

先感谢您

> 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)


Kje*_*sen 5

你肯定这是一个实际的问题:使用的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 调谐旋钮,很可能巧妙地和壮观地破坏您的系统。