Wie kann die Ressourcennutzung für einen bestimmten Prozess begrenzt werden?

10

Ich habe einen Prozess für eine Anwendung, der ausgeführt werden muss, aber am Ende viel zu viel E / A-Nutzung für das verwendet, was er tut. Und mein Computer stürzt wirklich ab, was es unmöglich macht, etwas anderes zu tun, während er läuft.

Ich habe mich also gefragt, ob es eine Möglichkeit gibt, die E / A-Nutzung, den Arbeitsspeicher und die CPU für einen bestimmten Prozess einzuschränken. Und natürlich seine Unterprozesse.

Dies ist auf meinem Ubuntu 18.04 LTS-System.


quelle
2
@GreatUncleBulgaria Nicht wirklich, es sei denn, Sie möchten sich von Reputationspunkten trennen. Die einfache Antwort auf Ihre Frage besteht darin, einfach zu kombinieren, was andere vorgeschlagen haben - ionice, renice- und vielleicht ulimit -sBefehle, und das war's.
Sergiy Kolodyazhnyy
@GreatUncleBulgaria Nicht vertraut mit cgroups-ioso keine Ahnung :)
Sergiy Kolodyazhnyy
Potenziell verwandte Frage: askubuntu.com/q/538992/295286 Die Antworten dort erwähnen cgroups, aber sonst nicht viel. . . könnte sein ?
Sergiy Kolodyazhnyy
1
@SergiyKolodyazhnyy: Sieht so aus, als hätte jemand die Kommentare aufgeräumt!

Antworten:

8

Sie sollten eine Kombination aller verwenden cgexec, cpulimitund ionice:

  1. RAM und SWAP begrenzen:

    sudo cgcreate -g memory:/szMyGroup
    echo $(( 512 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes
    echo $(( 1024 * 1024 * 1024 ))  | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes

    Die obigen Befehle erstellen eine Kontrollgruppe mit dem Namen szMyGroup(z. B. in Ihrem Fall group-great-uncle), setzen eine Obergrenze für die Prozesse, die mit szMyGroupbis zu 512 MB physischem Speicher und bis zu 1024 MB Swap ausgeführt werden, und dann:

    sudo cgexec -g memory:szMyGroup szMyProgram

    szMyGroupDadurch wird Ihr Programm unter der Kontrollgruppe ausgeführt, wodurch sichergestellt wird, dass die Grenzwerte eingehalten werden

  2. Begrenzen Sie die Festplatten-E / A:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)

    Der obige Befehl verwendet pgrepbei der Wiederverwendung von Teilen der aktuellen Befehlszeile , um den Festplattenzugriff so zu beschränken, dass die Festplatte nur verwendet wird, wenn kein anderes Programm sie verwendet

  3. Begrenzen Sie die CPU:

    sudo cpulimit --limit=25 --pid=!#:4

    Die CPU des Programms ist jetzt auf 25% des Maximums begrenzt

Wenn das Programm zunächst nicht viel CPU verbraucht, senken Sie den Wert von cpulimit auf die Hälfte oder weniger des derzeit verwendeten Werts.

Fabby
quelle