Rechenlast unter Linux managen

  • moin,


    Da ich es selber gerade gebraucht habe, ein kleines Tutorial zum Rechenlastmanagement unter Linux:


    Das Problem:


    Ein Prozess unter Linux läuft einfach nicht schnell genug oder das [lexicon]Rendern[/lexicon] nimmt einem sämtliche Ressouren weg und man kann nicht mehr im Internet surfen.


    Eine Lösung:


    Prozess-Prioritäten vergeben! Ein Linux Prozess kann die Prioritäten von -20 bis 19 erhalten und je kleiner die Zahl desto mehr [lexicon]CPU[/lexicon] Zeit bekommt der fragliche Prozess zugeteilt. Im Normalfall haben alle Prozesse eine Priorität von 0, was somit der neutrale Wert ist.


    Soll nun ein Prozess schneller oder langsammer gemacht werden müssen wir zunächst seine Prozess-Id herausfinden. Dazu kan der Befehl

    Code
    pgrep Programname

    genutzt werden. Also zum Beispiel

    Code
    pgrep recordmydesktop

    um die PIDs der recordmydesktop Instanzen herauszufinden.


    Alternativ dazu können wir den Befehl

    Code
    top

    in der Konsole nutzen. Das Ergebniss sieht ungefähr so aus:



    Nachdem wir den für uns interessanten Prozess gefunden haben, merken wir uns seine PID und können nun mit folgendem Befehl die Priorität ändern:


    Code
    sudo renice Priorität -p PID


    Um Prozesse zu verlangsammen (Priorität > 0), werden keine Root-Recht benötigt, zum Beschleunigen (Priorität<0) werden Rootrechte benötigt.


    Zusätzlich können die Festplattenzugriffe verlangsammt werden, indem der ähnliche Befehl

    Code
    ionice -c3 -p PID

    genutzt werden.


    Beispiel:


    Wenn wir dem Sound (pulseaudio) mehr Saft geben wollen und das [lexicon]Rendern[/lexicon] (recordmydesktop) in den Hintergrund packen wollen, wäre das in unserem Beispiel:


    Code
    sudo renice -10 -p 28027 #pulseaudio eine Hohe Priorität geben
    renice 19 -p 21555 #recordmydesktop eine niedrige Priorität geben
    renice 19 -p 12046 #recordmydesktop eine niedrige Priorität geben


    Und um in unserem Beispiel die Festplattenzugriffe von recordmydesktop niedriger zu priotisieren, müsste der Befehl

    Code
    ionice -c3 -p 21555
    ionice -c3 -p 12046

    genutzt werden.


    Anmerkung:


    In den meisten Distributionen wird es einen Prozessmanager geben, über den man das auch machen kann. Diese Lösung funtioniert aber auch in den Fällen in denen das Bertriebsystem so überlastet ist, das außer der Konsole nichts mehr funktioniert

    4 Mal editiert, zuletzt von genericName () aus folgendem Grund: Rechtschreibung + Hinweise von Wurzelsalatsauce eingearbeitet

  • Vielen Dank für die Tipps, finde ich toll, dass du dir die Arbeit machst. :thumbup:


    Aber noch einige Anmerkungen:


    - Nice in positive Richtung braucht keine Rootrechte.


    - "pgrep $programm" wirft eine PID aus, es ist z.B. scriptbar mit "renice 10 -p`pgrep $programm`".
    + (In einer for-Loop lassen sich damit mehrere gleiche Programme erschlagen.)


    - Die Rechenlast ist oft nicht das Problem sondern das IO der Platten (Lagg):
    + "ionice -c3 $programm" startet $programm mit niedrigster Plattenrpriorität.
    + mit "ionice -c3 -pPID" ist das nachträgllich möglich.


    - Es lässt sich die ganze Shell priorisieren (auch IO), die PID ist in $$

  • Vielen Dank für die Tipps, finde ich toll, dass du dir die Arbeit machst. :thumbup:


    Aber noch einige Anmerkungen:
    ...


    Dir auch Danke für die nützlichen Anmerkungen, Ich hab sie mal ins Tutorial eingearbeitet. Außerdem haben sie mir selber auch weitergeholfen :-)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!