Hoher Speicherverbrauch auf Linuxsystemen mit GPFS

ich wollte hier über meine Erfahrungen mit einem GPFS System berichten welches zu viel Speicher verbraucht. Wir hatten dazu auch einen PMR bei IBM geöffnet der uns leider nicht sehr viel weitergeholfen hat.

Um es vorweg kurz zu machen, das Augenscheinliche Problem ist gar kein Problem, sondern liegt im Blickwinkel des Betrachters. Den es wird zwar viel Arbeitsspeicher verbraucht, dieser wird aber wieder freigegeben. Dazu später mehr.

  • Wie es dazu kam das ich ein Problem vermutete
Ich habe einen neuen Nagios-Check auf den Systemen eingerichtet der den Arbeitsspeicher Verbrauch überwacht. Dieser Check hat nach sehr kurzer Laufzeit schon angeschlagen und gemeldet das mehr als 80% des verfügbaren Arbeitsspeichers verwendet wird.

  • Analyse des zu hohen Speicherverbrauchs
Ich habe dann mit top und ps nachgeforscht welche Applikation so viel Speicher verbrauchen könnte. Ich konnte auf dem ganzen System kein Programm finden welches so viel Arbeitsspeicher verbraucht das der verfügbare Arbeitsspeicher ganz verbraucht ist. Nach längerem Suchen fand ich im Internet Hinweise darauf mal im slabcache nachzuschauen. Dort wurde ich dann auch fündig. Der gpfsInodeCache ist Teil des Kernel-slab und brauchte auf einem System welches 17GB Arbeitsspeicher hat 12GB für den gpfsInodeCache. Auf diesem Cluster sind über 15 Millionen Dateien/Verzeichnes gespeichert. Und der Anstieg des Speicherverbrauchs kam immer zusammen mit dem Backup vor. Wenn also jemand sehr viele Dateien/Verzeichnisse anfasst werden auch viele Inodes gelesen. Diese wandern dann in den gpfsInodeCache.

  • Call bei IBM
Weder der Support in Deutschland noch der Support in England konnte uns bei diesem Problem helfen. Leider ist auch die im Internet verfügbare Dokumentation zum slabcache sehr dünn. Der Support hat dann unseren PMR nach USA zu den Entwicklern weitergereicht. Die erklärten das sei ein ganz normales Verhalten, und es handelt sich nicht um ein Speicherleck. Leider könnten auch die Kollegen aus den USA nicht näher erläurten wie es denn genau zu dem hohen Speicherverbrauch kommt.

  • Erklärung
Da ja der Support uns nicht wirklich weiterhelfen konnte habe ich mich selber auf die Suche nach der Lösung gemacht. Einige Hinweise hatte ich ja bereits.
Der gpfsInodeCache ist Teil des Kernel-Slabcahces und zieht sich so viel Arbeitsspeicher wie er bekommen kann. Der Arbeitsspeicher der einmal für den Slab verwendet wird wird von alleine nicht wieder freigegen. Erst wenn eine Applikation neuen Arbeitsspeicher beim Kernel anfragt wird der Slab verkleinert und der Prozess bekommt seinen angefragten Arbeitsspeicher.

  • Das habe ich wie folgt überprüft
Ich habe ein tmpfs Dateisystem angelegt welches komplett im Arbeitsspeicher gehalten wird. In diesem Dateisystem habe ich mit dd einige große Dateien angelegt (jeweils 1GB) und konnte dann beobachten das Arbeitsspeicher aus dem slab-Bereich freigegeben wird und der Chache wächst. Um das zu beobachten habe ich die Tools top und slabtop verwendet.


  • Hintergrund zum Nagios-Check
Leider sind alle Standard-Tools zur Anzeige von Arbeitsspeicher-Verbräuchen so gestrickt, das sie den slabache zum Gesamtspeicherverbrauch einfach dazu rechnen. Das Funktioniert auf Standardsystemen auch wunderbar. Die Standardtools werden auch von den Nagios-Checks verwendet.
Wenn man sich auf meinem System einmal die Ausgabe von free anschaut, sieht man das fast der ganze Arbeitsspeicher verwendet wird, und zwar als used Memory. Das verwirrt natürlich total den es sieht so aus als ob Arbeitsspeicher unsichtbar verwendet wird.

  • Fazit
Works as designed....