[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Packprogramme: Archivdateien entpacken] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Mit Hilfe des [sourceforge:cpulimit:CPU Usage Limiter for Linux] {en} kann man die maximale prozentuale CPU-Zeit, die ein Prozess verbrauchen darf, begrenzen. Damit unterscheidet sich das Programm von den Befehlen [:Shell/nice:nice] bzw. [:Shell/nice#renice:renice], die stattdessen die Priorität eines Prozesses festlegen oder verändern. Erfolgreich getestet wurde das Programm in verschiedenen Ausnahmesituationen, z.B. wenn ein Notebook während der Installation von Ubuntu überhitzt und in Folge einfach abschaltet (siehe [topic:baustelle-cpulimit:Diskussion]). = Installation = Das Programm kann direkt aus den Paketquellen installiert [1] werden: {{{#!vorlage Paketinstallation cpulimit, universe }}} ##aasche: ueberfluessig, da in den Paketquellen ##Um das Programm aus dem Quelltext zu übersetzen (kompilieren), installiert [1] man zuerst folgendes [:Metapakete:Metapaket]: ## ##{{{#!vorlage Paketinstallation ##build-essential ##}}} ## ##Anschließend lädt man von der [sourceforge:cpulimit/files:Downloadseite] {en} {dl} die Archivdatei '''cpulimit-1.1.tar.gz''' herunter und entpackt [2] sie ins eigene [:Homeverzeichnis:]. Nun wechselt man in den beim Entpacken entstandenen Ordner '''~/cpulimit-1.1/''' und kompiliert das Programm in einem Terminal-Fenster [3] mit dem Befehl: ## ##{{{#!vorlage Befehl ##make ##}}} ##Prinzipiell lässt sich das Programm sofort einsetzen. Zur systemweiten Nutzung kann man es optional nach '''/usr/local/bin/''' kopieren und die Rechte anpassen: ## ##{{{#!vorlage Befehl ##sudo cp cpulimit /usr/local/bin/ ##sudo chown root:root /usr/local/bin/cpulimit ##sudo chmod 770 /usr/local/bin/cpulimit ##}}} ## ##Die Änderungen an den Rechten bewirken allerdings, dass man das Programm nun immer mit `sudo cpulimit ...` starten muss (was empfohlen wird, wenn man nicht nur eigene Prozesse limitieren will). = Benutzung = Die allgemeine Syntax lautet [3]: {{{#!vorlage Befehl cpulimit ZIEL OPTIONEN & }}} {{{#!vorlage Hinweis Wenn man nicht nur eigene Prozesse limitieren will, muss man das Programm mit `sudo cpulimit ...` starten. }}} `ZIEL` ist dabei der Prozess/das Programm, was begrenzt werden soll. Der optionale Parameter `&` veranlasst das Programm, dauerhaft im Hintergrund zu arbeiten (ansonsten beendet man es mit [[Vorlage(Tasten, Strg+c)]]). Folgende Ziele sind möglich: ||<-2 tablestyle="width: 95%;" rowclass="titel"> Ziele|| || Syntax||Beschreibung|| ||`-p N`, `--pid=N`|| PID eines Prozesses || ||`-e DATEI`, `--exe=DATEI`|| Name einer ausführbaren Datei || ||`-P PFAD`, `--path=PFAD`|| absoluter Pfad zu einer ausführbaren Datei || Folgende Optionen sind möglich: ||<-2 tablestyle="width: 95%;" rowclass="titel"> Optionen|| || Syntax||Beschreibung|| ||`-l N`, `--limit=N`|| maximal erlaubte CPU-Zeit in Prozent (__muss__ immer angegeben werden!) || ||`-v`, `--verbose`|| zeigt statistische Informationen an || ||`-z`, `--lazy`|| beendet cpulimit, wenn es keinen entsprechenden Prozess gibt oder dieser beendet wird || ||`-h`, `--help`|| zeigt einen Hilfstext an || == Beispiele == Angenommen, ein Prozess bzw. Programm namens "`foo`" wurde gestartet und erzeugt eine CPU-Auslastung von 100%. Mit folgendem Befehl kann die maximale CPU-Zeit auf 50% begrenzt werden: {{{#!vorlage Befehl cpulimit -e foo -l 50 }}} Mit folgendem Befehl kann die maximale CPU-Zeit, die '''/usr/bin/foo''' verbraucht, auf 30% begrenzt werden: {{{#!vorlage Befehl cpulimit -P /usr/bin/foo -l 30 }}} Mit folgendem Befehl kann die maximale CPU-Zeit, die der Prozess mit der PID "`1234`" verbraucht, auf 20% begrenzt werden: {{{#!vorlage Befehl cpulimit -p 1234 -l 20 }}} = Anmerkungen = Bei Mehrkern-CPUs oder Rechnern mit mehreren Prozessoren ist die maximal mögliche prozentuale CPU-Zeit ein Vielfaches von 100% (z.B. 400% bei einer Vier-Kern-CPU). cpulimit begrenzt auch die maximale CPU-Zeit der Kindprozesse. D.h. die CPU-Zeit des Prozesses inklusive seiner Kindprozesse wird begrenzt. Allerdings ist diese Funktion noch __experimentell__ und funktioniert ggf. nicht in allen Fällen korrekt. = Links = * [sourceforge:cpulimit:Projektseite] {en} * [https://ubuntuforums.org/showthread.php?t=992706 HOWTO: Set maximum CPU consumption in percentage by any process] {en} - ein Dienst (Daemon bzw. Service) basierend auf cpulimit zur Kontrolle der maximalen CPU-Zeit aller Prozesse * [:schedutils:] - fortgeschrittene Befehle zur Prozesskontrolle #tag: Prozesse, System, Shell