Platte verwendet 88 GB von 128 GB zur Verfügung. Was könnte das verursachen?

8

Wir führen ein Debian 2.6.26-2-amd64 x86_64 GNU / Linux auf einem Server mit 128 GB aus. Vor kurzem wurde unser verfügbarer Speicher ziemlich niedrig. Ein Blick auf / proc / meminfo zeigte, dass die Platte 88 GB verwendete, was natürlich im verwendeten Speicher gezählt wird.

  1. Ist das ein Problem? Ich vermute, dass Speicher bei Bedarf freigegeben wird, aber ich weiß nicht, ob dies unerwünschte Nebenwirkungen haben könnte.
  2. Warum sollte Slab so viel Speicher benötigen? Gibt es dafür einen klaren Grund?
  3. Können wir dies in Zukunft vermeiden?
  4. Wie können wir diese Erinnerung freigeben?

Vielen Dank im Voraus

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

Antworten:

5

Sind Sie sich absolut sicher, dass dies ein tatsächliches Problem ist: Der verwendete Arbeitsspeicher ist nicht mit dem nicht verfügbaren RAM identisch (siehe z. B. diese ServerFault-Frage zu free / buffer / cache ). Der Reflex, dass Speicher als frei aufgeführt werden soll, ist häufig falsch.

Slab ist keine bestimmte Sache, sondern einer der Speicherzuweiser innerhalb des Kernels. Insbesondere Slab ermöglicht es dem Kernel, Objekte zu verwalten, die keine Seitengröße haben (wie an anderer Stelle erwähnt, sollten / proc / slabinfo und slabtop Ihnen einige Hinweise geben woran es gerade festhält). Weitere Hintergrundinformationen zur Platte finden Sie hier

Wenn Sie die SReclaimable unter Slab sehen, ist Sie der Meinung, dass fast der gesamte von der Slab zugewiesene Speicher bei Bedarf zurückgefordert werden kann. Ja, der Speicher wird bei Bedarf freigegeben. Die Nebenkosten für die Rückforderung zahlen einige aufgeschobene Buchhaltungskosten in CPU-Zyklen.

Ich bin mir nicht sicher, ob die Platte genau genommen all diesen Speicher benötigt. In vielen Fällen werden initialisierte Objekte für die spätere Verwendung aufbewahrt (Speichern der Initialisierung). Einige davon sind verschiedene Caches. Das meiste davon ist wahrscheinlich vorteilhaft (dh Effekte) von Dateisystem-Caches sind immens).

Wenn Sie das Verhalten von vmm steuern möchten , lesen Sie / proc / sys / vm . Insbesondere min_slab_ratio könnte von Interesse sein. Sie können auch einzelne Slab-Caches über / proc / slabinfo einschränken ( Details finden Sie im Artikel zu ibm developerworks ). Bevor Sie jedoch mit dem Einschalten von Vmm und Platte beginnen: Stellen Sie fest, was Sie tatsächlich erreichen möchten, und untersuchen Sie das Vmm und wie es an Ihre Arbeitslast (en) angepasst werden kann. Es ist durchaus möglich, Ihr System auf subtile und spektakuläre Weise zu beschädigen, indem Sie mit vmm-Stimmknöpfen herumspielen.

Kjetil Jörgensen
quelle
Vielen Dank für die ausführliche Antwort und die Links
Joris Meys
1
Der IBM Developerworks-Link funktioniert nicht mehr.
Ikke
11

Verwenden Sie Informationen zum Slabtop-Display-Kernel-Slab-Cache:

slabtop

Siehe auch "vmstat -m":

vmstat  -m

und schau / proc / slabinfo:

cat /proc/slabinfo

Löschen Sie den Cache, um Speicherplatz freizugeben

sync; echo 3 > /proc/sys/vm/drop_caches
ooshro
quelle
Vielen Dank für die Befehle, sie machen das Leben in der Tat ein bisschen einfacher.
Joris Meys