ADMIN-Tipp: Prozessorauslastung begrenzen

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Wenn Prozesse die CPU ins Schwitzen bringen: CPUlimit überredet einzelne Anwendungen, ihren CPU-Bedarf zu zügeln.

Was, wenn die Prozessorleistung im Rechner nicht mehr ausreicht, um alle laufenden Prozesse zufriedenzustellen? Im Idealfall kein großes Problem: Das System verteilt die verfügbaren Rechenzyklen gerecht an die einzelnen Antragsteller und arbeitet auf Hochtouren, um alles abzuarbeiten. Nötigenfalls sorgt das Programm Nice dafür, dass wichtige Prozesse ein größeres Stück vom Rechenkuchen abbekommen.

Doch Nice legt nur die relative Priorität eines laufenden Prozesse in Bezug zu anderen fest. Das Programm CPUlimit nimmt einen anderen Ansatz: Es begrenzt die absolute Prozessorauslastung, die ein Prozess verantworten darf. Denn in der Realität schmeckt es der Hardware manchen Rechners nicht, wenn er über lange Zeit mit voller Kraft läuft. Auch wenn in der Theorie die Lüftung mitzieht, kommt es in der Realität dennoch häufig nach einigen Stunden oder gar Tagen der Vollanstrengung zu tödlicher Hitzeentwicklung. Obwohl sich heutzutage ein Rechner abschaltet, bevor der Hardware-Hitzetod eintritt, gilt es, zumindest bei problematischen Rechnern die Prozessorauslastung zu begrenzen.

CPUlimit steht bei manchen Linux-Distributionen als fertiges Paket im Repository und lässt sich ansonsten mit Make unter Linux, BSD und Mac OS X kompilieren.

Das Programm nimmt zunächst einen Zielprozess entgegen, entweder per Prozess-ID mit "-p" oder "--pid" oder per Dateinamen mit "-e" oder "--exe". Zur genauen Bestimmung des Pfadnamens einer ausführbaren Datei dient die Option "-P" oder "--path".

Es folgt die Definition der maximalen CPU-Last, die ein Prozess verursachen darf. Am wichtigsten ist die obligatorische Option "-l" oder "--limit", die diese Zahl in Prozent definiert. Dieses Kommando begrenzt beispielsweise den Firefox-Browser auf eine CPU-Last von höchstens 50 Prozent:

# cpulimit --exe firefox -l 50

Zum Funktionieren benötigt das Programm Root-Rechte.

Das Limit liegt bei Systemen mit einem Prozessor zwischen 1 und 100. Beim Start fragt CPUlimit die Anzahl verfügbarer Prozessoren beziehungsweise Kerne ab und bei vier Prozessoren erhöht sich beispielsweise die Höchstgrenze auf 400 Prozent. Die Option "-c" oder "--cpu" legt die Zahl der Prozessoren manuell fest.

Verwendet man den Dateinamen zur Identifikation eines zu zügelnden Prozesses, bezieht sich CPUlimit auf den ersten Prozess im "/proc"-Verzeichnis, auf den der Name zutrifft. Bei mehreren gleichnamigen Prozessen laufen die anderen also ungehemmt weiter, für die genauer gezielte Limitierung muss in dem Fall die Prozess-ID her.

Existiert hingegen kein Prozess passenden Namens, wartet CPUlimit auf einen solchen. Wird dieser gestartet, drosselt CPUlimit ihn den Angaben entsprechend. Nach dessen Ende wartet das Programm weiter, bis erneut ein passender Prozess auftaucht. Dieses lauernde Verhalten unterbindet die Option "-z" oder "--lazy". Mit ihr beendet sich CPUlimit, falls es keinen Prozess mit dem angegebenen Namen findet, oder wenn dieser beendet wird.

Wer ausufernde Prozesse etwas härter angehen möchte, verwendet die Option "-k" oder "--kill". Sobald der Zielprozess das verordnete Limit überschreitet, schießt CPUlimit ihn ab. Glücklicherweise ist die Todesstrafe in dieser Welt umkehrbar: Einen irrtümlich hingerichteten Prozess stellt CPUlimit mit der Option "-r" oder "--restore" wieder her.

Daneben lässt sich mit dem Aufruf von CPUlimit auch gleich der Zielprozess starten. Dazu hängt man den aufzurufenden Befehl an den CPUlimit-Aufruf an, statt eine Prozess-ID oder einen Prozessnamen zu definieren:

cpulimit -l 50 firefox

CPUlimit funktioniert, indem es die überwachten Prozesse bei Überschreiten ihres CPU-Limits mit dem System-Call "SIGSTOP" anhält und dann mit "SIGCONT" weiterlaufen lässt. Programme, die solche Vorgänge aktiv registrieren, reagieren darauf möglicherweise mit Warnmeldungen.

CPUlimit gehört in die Kategorie von Admin-Tools, die in der Theorie überflüssig sein sollten. In der Praxis weiß der Admin aber, dass eine übermäßige CPU-Auslastung ein System vor Probleme stellen kann und er kennt häufig auch seine Pappenheimer. Mit CPUlimit kriegt er Anwendungen mit der Tendenz zur Überanstrengung in den Griff und verhindert die Dauerauslastung seiner Prozessoren.

28.01.2014
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023