web-dev-qa-db-ja.com

スラブは128Gbのうち88Gbを使用できます。何が原因でしょうか?

128 Gbのサーバーでdebian 2.6.26-2-AMD64 x86_64 GNU/Linuxを実行しています。最近、使用可能なメモリがかなり少なくなりました。/proc/meminfoを見ると、スラブが88Gbを使用していることがわかりました。

  1. これは問題ですか?必要なときにメモリが解放されるのではないかと思いますが、それが望ましくない副作用を引き起こす可能性があるかどうかはわかりません。
  2. なぜスラブはそんなに多くのメモリを必要とするのでしょうか?その明確な原因はありますか?
  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
8
Joris Meys

これが実際の問題であると確信していますか?:RAM isnotnot available ramと同じです(つまり、これを参照してください) free/buffers/cacheでのServerFaultの質問 )、メモリを空きとしてリストしたいという反射は、しばしば間違っています。

スラブは特定のものではなく、カーネル内のメモリアロケータの1つです。特に、スラブにより、ページサイズではないオブジェクトをカーネルで管理できます(/ proc/slabinfoとslabtopで指摘されているように、現在保持しているもの)。スラブに関するいくつかの背景が見つかります ここ

スラブの下にSReclaimableが表示された場合、スラブによって割り当てられたほぼすべてのメモリは、必要なときに必要に応じて再利用できると考えています。だから、はい、必要なときにメモリが解放されます。再利用に付随するコストは、CPUサイクルでいくらかの繰延簿記コストを支払っています。

スラブが厳密にそのすべてのメモリを必要とするかどうかはわかりませんが、多くの場合、後で使用するために初期化されたオブジェクトを保持します(初期化を保存します)、そのいくつかはさまざまなキャッシュで、これのほとんどはおそらく有益です(つまり、効果ファイルシステムキャッシュの数は膨大です)。

Vmmの動作を制御したい場合は、 / proc/sys/vm を確認してください。特に、min_slab_ratioに注目してください。/proc/slabinfoを使用して個々のスラブキャッシュを制限することもできます(詳細は ibm developerworksの記事 を参照してください)。ただし、vmmとスラブをオンにする前に、実際に何を実行したいのかを理解し、vmmとワークロードに合わせてそれをどのように調整できるかについて調査します。 vmmチューニングノブをいじって、システムを微妙に、そして見事に破壊することは十分に可能です。

5

Slabtop表示カーネルスラブキャッシュ情報を使用します。

slabtop

また、「vmstat -m」を参照してください。

vmstat  -m

/ proc/slabinfoを見てください:

cat /proc/slabinfo

キャッシュを削除してメモリを解放する

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