Slab menggunakan 88Gb dari 128Gb tersedia. Apa yang bisa menyebabkan ini?

8

Kami menjalankan debian 2.6.26-2-amd64 x86_64 GNU / Linux di server dengan 128 Gb. Baru-baru ini, memori kami yang tersedia menjadi agak rendah. Melihat / proc / meminfo menunjukkan bahwa Slab menggunakan 88Gb, yang dihitung dalam memori yang digunakan tentunya.

  1. Apakah ini masalah? Saya menduga bahwa memori akan dibebaskan ketika diperlukan, tetapi saya tidak tahu apakah itu bisa memiliki efek samping yang tidak diinginkan.
  2. Mengapa Slab membutuhkan banyak memori? Apakah ada alasan yang jelas untuk itu?
  3. dapatkah kita menghindari hal ini terjadi di masa depan?
  4. Bagaimana kita bisa membebaskan memori ini?

Terima kasih sebelumnya

> 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
Joris Meys
sumber

Jawaban:

5

Apakah Anda benar-benar yakin ini adalah masalah aktual: RAM yang digunakan tidak sama dengan ram yang tidak tersedia (Lihat mis. ServerFault ini tentang gratis / buffer / cache ), refleks ingin memiliki memori yang terdaftar sebagai bebas sering salah.

Slab bukan satu hal yang spesifik, itu adalah salah satu pengalokasi memori di dalam kernel, khususnya slab memungkinkan kernel mengelola objek yang tidak berukuran halaman (seperti yang ditunjukkan di tempat lain / proc / slabinfo dan slabtop akan memberi Anda beberapa indikasi apa yang saat ini berpegang pada). Beberapa latar belakang lebih lanjut tentang slab dapat ditemukan di sini

Jika Anda melihat SReclaimable di bawah Slab, ini berpendapat bahwa hampir semua memori yang dialokasikan oleh slab dapat direklamasi saat / jika diperlukan. Jadi, ya, memori akan dibebaskan saat diperlukan. Biaya insidental reklamasi membayar beberapa biaya pembukuan yang ditangguhkan dalam siklus-cpu.

Saya tidak yakin apakah lempengan yang benar-benar membutuhkan semua memori itu, dalam banyak kasus akan mempertahankan objek yang diinisialisasi untuk digunakan nanti (menyimpan inisialisasi), beberapa di antaranya adalah berbagai cache, sebagian besar ini mungkin bermanfaat (yaitu efek cache sistem file sangat besar).

Jika Anda ingin mengontrol perilaku vmm, periksa / proc / sys / vm , khususnya min_slab_ratio mungkin menarik. Anda juga dapat membatasi masing-masing cache slab melalui / proc / slabinfo (lihat artikel ibm developerworks untuk detailnya). Meskipun, sebelum Anda mulai menyalakan vmm dan slab: Cari tahu apa yang sebenarnya ingin Anda capai, dan lakukan riset pada vmm dan bagaimana bisa disetel agar sesuai dengan beban kerja Anda. Sangat mungkin untuk merusak sistem Anda secara halus dan spektakuler dengan bermain-main dengan vmm tuning-knob.

Kjetil Joergensen
sumber
terima kasih banyak atas tanggapan mendalam dan
tautannya
1
Tautan developerworks IBM tidak berfungsi lagi.
Ikke
11

Gunakan informasi cache slab kernel slabtop display:

slabtop

Juga lihat "vmstat -m":

vmstat  -m

dan lihat / proc / slabinfo:

cat /proc/slabinfo

Jatuhkan cache untuk membebaskan memori

sync; echo 3 > /proc/sys/vm/drop_caches
ooshro
sumber
Terima kasih untuk perintah, itu membuat hidup memang sedikit lebih mudah.
Joris Meys