Das Monitoring des Arbeitsspeichers eines Linux-Systems ist mühselig: Der physikalische RAM ist immer voll, die Auslagerungsdatei alleine betrachte keine wirklich genaue Aussage.

Also mal wieder Monitoring. Du merkst schon, dass ist ein Thema das mich immer wieder beschäftigt. Ein Dauerbrenner. Und immer wieder erstaunlich: Es gibt schon so viele Checks. Einige sind richtig gut. Und dennoch können einige davon noch weiter verbessert werden. Vieles fehlt dennoch. Oder die Dinge wurden nicht tief genug ausgewertet. Genauso erging es mir bei der vordergründig simplen Frage: „Wie viel des Arbeitsspeichers eines Linux-Servers ist denn tatsächlich noch frei?“

Prolog

Eine Summenbetrachtung für das Monitoring des Arbeitsspeichers unter Linux: Physikalischer und ausgelagerter Speicher. Elegant verpackt in einem Check.

Es ist nun mal so, dass auf einem Linux Server sobald dieser etwas zu tun hat der physikalische Arbeitsspeicher fast immer voll ist. Buffers und Festplattencache füllen, sinnvollerweise, den eigentlichen freien Speicher fast komplett aus. Eine Betrachtung der noch freien Bytes? Bringt nichts da keine sinnvolle Aussage möglich. Freie Bytes zuzüglich Buffers und Cache als Summe betrachtet? Schon besser. Aber nicht wirklich gut. Den diese Summe könnte immer noch kleiner als der belegte Bereich im Swap sein.

Eine gern genommene Notlösung da der RAM eh immer voll ist: Die reine Betrachtung des Swaps. Wenn dieser sich füllt hat der Server zu wenig RAM. Das mag für viele Systeme soweit ganz gut passen. Aber genau ist was anderes und was ist mit denen wo das so nicht stimmt? Ein Server bei dem zwar der Swap sehr voll ist, die Summe von Buffers, Festplattencache und physikalisch frei aber um etliches größer? Das kommt öfters vor als man zunächst denken mag. Stichwort „swappiness“ falls Du danach suchen magst 😉

Dieser Check hat schon ein paar Jahre hinter sich, funktioniert aber immer noch sehr gut. Und da mir vor kurzem eine Frage in genau diese Richtung gestellt wurde habe ich den alten Quellcode genommen, etwas aufgehübscht, MIT-Lizenz rein und frei zur Verfügung gestellt. Und so sieht das Ergebnis in Icinga aus – inkl. dem passenden pnp4nagios Template:

extmem in icingaweb2

extmem in icingaweb2

extmem performance data

extmem performance data

Ok, das rechte Bild mit den Performance-Daten mag nicht ganz perfekt sein: Der obere Bereich des Swaps ist fast leer. Aber als Beispiel reicht es trotzdem: Unten ist der physikalische Teil aufgelistet, darüber der Swap-Bereich. Die Limit-Angabe für Warning und Critical ist möglich und betrachtet das prozentuale Verhältnis zwischen „belegt“ sowie „frei“ zuzüglich Buffers und Cache.

Auch dieser Check ist sicherlich alles andere als perfekt. Aber er ist deutlich näher dran als die einzelne Betrachtung von RAM und Swap. Vor allem die Darstellung der Performance-Daten in denen die Gesamtsumme des Speichers dargestellt wird lässt über längere Zeiträume betrachtet eindeutige Tendenzen erkennen. Bei den meisten von mir verwalteten Linux-Servern ist inzwischen dieser Check installiert und wird immer wieder gerne hergenommen sobald eine entsprechende Auswertung der Serverlast benötigt wird.

Hier findest Du check_extmem auf GitLab: https://gitlab.com/Gehirn-Mag.net/icinga-and-nagios-plugins/tree/master/linux/check_extmem