Slab使用88Gb的128Gb可用空间。是什么原因造成的?


8

我们在具有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

Answers:


5

你肯定这是一个实际的问题:使用的RAM是一样的不可用的RAM(请参阅本即对自由/缓存/缓存ServerFault问题),希望有记忆列为自由往往是错的反射。

Slab不是一回事,它是内核中的内存分配器之一,特别是slab可以让内核管理不是页面大小的对象(如在其他地方指出的/ proc / slabinfo和slabtop应该给您一些指示它目前所坚持的目标)。在这里可以找到更多关于平板的背景

如果您在Slab下面看到SReclaimable,则认为在需要时/如果需要,可以回收几乎所有由Slab分配的内存。因此,是的,在必要时将释放内存。回收的附带成本在cpu周期中支付了一些递延的簿记成本。

我不确定从严格意义上讲平板是否需要所有内存,在很多情况下它会保留初始化的对象以供以后使用(保存初始化),其中一些是各种缓存,其中大部分可能是有益的(即效果文件系统缓存的数量巨大)。

如果要控制vmm的行为,请检出/ proc / sys / vm,特别是min_slab_ratio可能是您感兴趣的。您还可以通过/ proc / slabinfo限制单个slab缓存(有关详细信息,请参见ibm developerworks文章)。但是,在开始使用vmm和slab之前:确定您实际要完成的工作,并对vmm进行一些研究,以及如何对其进行调整以适合您的工作量。通过使用vmm调整旋钮,可以巧妙而巧妙地破坏系统。


非常感谢您的深入答复和链接
Joris Meys 2011年

1
IBM developerworks链接不再起作用。
Ikke 2013年

11

使用slabtop显示内核slab缓存信息:

slabtop

另请参阅“ vmstat -m”:

vmstat  -m

并查看/ proc / slabinfo:

cat /proc/slabinfo

将缓存放到可用内存中

sync; echo 3 > /proc/sys/vm/drop_caches

命令,它们使生活确实容易一些。
Joris Meys 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.