Ich habe einen Prozess für eine Anwendung, die ausgeführt werden muss, aber am Ende viel zu viel E / A-Nutzung für das verwendet, was sie tut. Und bringt meinen Computer wirklich zum Absturz, was es unmöglich macht, irgendetwas anderes zu tun, während er läuft.
Also habe ich mich gefragt, ob es eine Möglichkeit gibt, die IO-Nutzung, RAM und CPU für einen bestimmten Prozess zu begrenzen? Und natürlich seine Teilprozesse.
Dies ist auf meinem Ubuntu 18.04 LTS-System.
Beste Antwort
Sie sollten eine Kombination aus allen cgexec
verwenden , cpulimit
und ionice
:
-
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 namens
szMyGroup
(Z. B. in Ihrem Fallgroup-great-uncle
), legen Sie eine Obergrenze für die Prozesse fest, die unterszMyGroup
ausgeführt werden bis zu 512 MB physischer Speicher und bis zu 1024 MB Swap und dann:sudo cgexec -g memory:szMyGroup szMyProgram
die Ihr Programm unter
szMyGroup
ausführen wird Kontrollgruppe und stellt so sicher, dass sie die Grenzwerte einhalten -
Beschränken Sie die Festplatten-E/A:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
Der obige Befehl verwendet
pgrep
mit der Wiederverwendung von Teilen der aktuellen Befehlszeile, um den Festplattenzugriff darauf zu beschränken, die Festplatte nur zu verwenden, wenn kein anderes Programm sie verwendet -
Begrenzen Sie die CPU:
sudo cpulimit --limit=25 --pid=!#:4
Die CPU des Programms ist jetzt auf 25 % des Maximums begrenzt
Wenn das Programm zu Beginn nicht viel CPU verbraucht, verringern Sie den Wert von cpulimit auf die Hälfte oder weniger dessen, was es derzeit verwendet.