Es ist immer wieder erstaunlich, dass ich auch noch nach Jahren der Arbeit mit Linux nützliche Befehle für die Kommandozeile entdecke, die ich bisher nicht kannte. Jetzt ist mir der Befehl choom über den Weg gelaufen, mit dem man die Out-Of-Memory-Killer des Kernels anpassen kann. Wenn der Arbeitsspeicher langsam knapp wird, schaut sich der Out-Of-Memory-Killer nach Prozessen um, welche er beenden kann, um Platz zu schaffen. In dem Algorithmus steckt schon Intelligenz, aber grundsätzlich sind alle Prozesse gleich und daher kann es auch den falschen treffen – früher leider oft den zentralen X-Server. Deshalb hat man über die Datei /proc/…/oom_score_adj die Möglichkeit die Bewertung eines Prozesses anzupassen. Werte von -1000 bis -1 stufen einen Prozess als Kandidat zum Beenden herab und Werte von 1 bis 1000 lassen es entsprechend wahrscheinlicher werden, dass ein Prozess beendet wird, wenn der Speicher knapp wird; genaueres ist in der Manpage choom(1) und in proc(5) bei oom_score und oom_score_adj beschrieben.

supernice

In meiner .zshrc habe ich den Alias supernice definiert, den ich auch über weitere Aliase anderen Befehlen voranstelle. Zum Beispiel können die Befehle cp, mv, dd, rsync, badblocks oder make gut im Hintergrund laufen und müssen nicht die höchste Priorität genießen. Deshalb ist make in meiner Zsh-Konfiguation als alias make="supernice make -j$(nproc --ignore 1)" definiert.

Neben der Anpassung für die Speicherverwaltung, gibt es für Festplattenzugriffe den Befehl ionice und die Befehle nice und chrt, die für einen Prozess bestimmen, wie »nett« er bei der Aufteilung der CPU ist. Damit bastle ich in der .zshrc mein supernice:

supernice=( )
whence ionice >/dev/null && supernice=(ionice -c 3)
whence chrt >/dev/null && supernice+=(chrt --batch 0)
whence choom >/dev/null && supernice+=(choom -n 1000 --)
alias supernice="$supernice"

Bei mir ist der Prozess von KeePassXC auch fast zwei Gigabyte groß und es ist verschmerzbar, sollte der Dienst einmal verschwinden. Deshalb habe ich jetzt den Aufruf zu choom -n800 keepassxc erweitert, damit dieser zum Beispiel vor einer VM als Kandidat zum Speicherbeschaffen gewählt wird.