La lastra utilizza 88 GB di 128 GB disponibili. Cosa potrebbe causare questo?


8

Eseguiamo un debian 2.6.26-2-amd64 x86_64 GNU / Linux su un server con 128 Gb. Recentemente la nostra memoria disponibile è diventata piuttosto bassa. Guardando / proc / meminfo è emerso che lo Slab stava usando 88Gb, che viene contato nella memoria usata fuori rotta.

  1. È un problema? Sospetto che la memoria verrà liberata quando necessario, ma non so se ciò potrebbe avere effetti collaterali indesiderati.
  2. Perché Slab avrebbe bisogno di così tanta memoria? C'è una chiara causa per questo?
  3. possiamo evitare che ciò accada in futuro?
  4. Come possiamo liberare questa memoria?

Grazie in anticipo

> 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

Risposte:


5

Sei assolutamente sicuro che questo sia un vero problema: la RAM usata non è la stessa della RAM non disponibile (vedi cioè questa domanda ServerFault su free / buffers / cache ), il riflesso di voler avere la memoria elencata come free è spesso sbagliato.

Slab non è una cosa specifica, è uno degli allocatori di memoria all'interno del kernel, in particolare slab consente al kernel di gestire oggetti che non hanno le dimensioni di una pagina (come indicato altrove / proc / slabinfo e slabtop dovrebbe darvi qualche indicazione di a cosa sta trattenendo). Qui puoi trovare ulteriori informazioni sulla lastra

Se vedi la SR rivendicabile sotto la lastra, è dell'opinione che quasi tutta la memoria allocata dalla lastra possa essere recuperata quando / se necessario. Quindi sì, la memoria verrà liberata quando necessario. Le spese accessorie per il recupero stanno pagando alcuni costi di contabilità differiti in cicli cpu.

Non sono sicuro che se la lastra in senso stretto abbia bisogno di tutta quella memoria, in molti casi manterrà oggetti inizializzati per un uso successivo (salvataggio dell'inizializzazione), alcuni di essi sono varie cache, la maggior parte di questo è probabilmente utile (ad esempio effetti delle cache del filesystem sono immense).

Se vuoi controllare il comportamento di vmm, dai un'occhiata a / proc / sys / vm , in particolare min_slab_ratio potrebbe essere interessante. Puoi anche limitare le singole cache slab tramite / proc / slabinfo (vedi l'articolo ibm developerworks per i dettagli). Tuttavia, prima di iniziare ad accendere vmm e lastra: scopri cosa vuoi effettivamente realizzare e fai qualche ricerca su vmm e su come può essere ottimizzato per adattarsi al tuo carico di lavoro. È del tutto possibile rompere il sistema in modo sottile e spettacolare giocando con le manopole di sintonizzazione vmm.


grazie mille per la risposta approfondita e i collegamenti
Joris Meys,

1
Il collegamento IBM Developerworks non funziona più.
Ikke,

11

Usa le informazioni cache slab display kernel slabtop:

slabtop

Inoltre vedi "vmstat -m":

vmstat  -m

e guarda / proc / slabinfo:

cat /proc/slabinfo

Rilascia la cache per liberare memoria

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

grazie per i comandi, rendono la vita davvero un po 'più semplice.
Joris Meys,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.