Beschränken Sie die CPU-Auslastung eines Prozesses - Methoden?

7

Ich möchte die CPU-Auslastung eines Prozesses auf beispielsweise 10% begrenzen.

Eine Möglichkeit, dies zu tun, besteht darin, den Prozess jede Minute 6 Sekunden lang ununterbrochen auszuführen und ihn für den Rest der Zeit anzuhalten.

Ich möchte die Prozesspriorität nicht mit nice ändern.

user143118
quelle

Antworten:

6

cpulimit (neuerer Github-Link hier ) scheint das Werkzeug für den Job zu sein - Sie können die Prozessorauslastung eines Prozesses anhand der PID, des Prozessnamens oder des absoluten Speicherorts steuern und die Prozessorauslastung in Prozent der Gesamtmenge festlegen.

Aus den Dokumenten auf der SourceForge-Seite -

Anwendungsbeispiele

Begrenzen Sie den Prozess 'bigloop' durch den Namen der ausführbaren Datei auf 40% CPU:

cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40 

Begrenzen Sie einen Prozess durch PID auf 55% CPU:

cpulimit --pid 2960 --limit 55 

Starten Sie einen Prozess über die Befehlszeile und begrenzen Sie ihn auf 40% (nur in der Entwicklungsversion!):

cpulimit --limit 40 /etc/rc.d/rc.boinc start 

Cyberciti.biz hat eine Anleitung , die auch anzeigt, dass Sie sie möglicherweise verwenden können

-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.

Anstelle von --exe und so weiter.

Und für Multiprozessoren sollten Sie den Prozentsatz basierend auf 100 * Kernen festlegen. Ein duales System kann also Prozentsätze bis zu 150 und ein Quad-Core bis zu 200 zulassen

Gesellenfreak
quelle
3

Da Sie Ihr Betriebssystem nicht angegeben haben, werde ich hier nur eine Option für Windows und eine weitere für Linux einfügen:

Für Linux:

Verwenden Sie Stress :

stress ist ein bewusst einfacher Workload-Generator für POSIX-Systeme. Es belastet das System mit einer konfigurierbaren Menge an CPU-, Speicher-, E / A- und Festplattenbelastung. Es ist in C geschrieben und ist freie Software, die unter der GPLv2 lizenziert ist.

Hier ein Beispiel für einen Aufruf: Dem System wird ein Lastdurchschnitt von vier auferlegt, indem zwei CPU-gebundene Prozesse, ein E / A-gebundener Prozess und ein Speicherzuweisungsprozess angegeben werden.

   $ stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose
   stress: info: [9372] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd
   stress: dbug: [9372] (243) using backoff sleep of 12000us
   stress: dbug: [9372] (262) setting timeout to 10s
   stress: dbug: [9372] (285) --> hogcpu worker 9373 forked
   stress: dbug: [9372] (305) --> hogio worker 9374 forked
   stress: dbug: [9372] (325) --> hogvm worker 9375 forked
   stress: dbug: [9372] (243) using backoff sleep of 3000us
   stress: dbug: [9372] (262) setting timeout to 10s
   stress: dbug: [9372] (285) --> hogcpu worker 9376 forked
   stress: dbug: [9375] (466) hogvm worker malloced 134217728 bytes
   stress: dbug: [9372] (382) <-- worker 9374 signalled normally
   stress: dbug: [9372] (382) <-- worker 9373 signalled normally
   stress: dbug: [9372] (382) <-- worker 9375 signalled normally
   stress: dbug: [9372] (382) <-- worker 9376 signalled normally
   stress: info: [9372] successful run completed in 10s

Für Windows:

Verwenden Sie BES - Battle Encoder Shirase 1.4.5 / 1.5.2 :

Kostenlose Software, die die CPU-Auslastung pro Prozess steuert. "Aktiver" Software-CPU-Kühler. BES ist ein kleines Tool, das die CPU-Auslastung für den Prozess, auf den Sie „abzielen“, drosselt: Sie können beispielsweise die CPU-Auslastung eines Prozesses, der 100% CPU verbraucht, auf 50% (oder einen beliebigen Prozentsatz) begrenzen. . Auf diese Weise können Sie andere Programme bequem verwenden, während Sie im Hintergrund etwas CPU-intensives tun.

Durch Begrenzen der CPU-Auslastung können Sie Ihre CPU auch sofort abkühlen, wenn es zu heiß wird. Es ist ein "aktiver" Software-CPU-Kühler. Herkömmliche Softkühler sparen CPU-Energie, indem sie die CPU im Leerlauf in den Ruhezustand versetzen. Sie warten passiv, bis die CPU inaktiv ist. BES ist aggressiver: Es kühlt die CPU, indem es den „Heizprozess“ verlangsamt, dh die CPU regelmäßig für kurze Zeit in den Leerlauf versetzt. (Sie sollten jedoch einen besseren Hardwarekühler installieren, wenn Sie häufig BES für diesen Zweck verwenden müssen. Das erste, was Sie versuchen sollten, ist, Staub um Ihren Kühlkörper zu entfernen (siehe unten). Aktive Soft-Kühlung kann ein interessanter Hack sein , aber es ist immerhin nur eine Problemumgehung. Wenn Ihre Anwendung die CPU zu 100% bedeutungslos nutzt, lassen Sie BES den Job machen!)

Geben Sie hier die Bildbeschreibung ein

Sie können es auch über die Windows-Befehlszeile automatisieren:

Die folgende Befehlszeile weist BES an, target.exe zu überwachen und - wenn target.exe ausgeführt wird - die CPU-Auslastung zu drosseln, sodass target.exe höchstens CPU (100 - Prozent)% verwenden darf:

"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]

Optional können Sie eine Ganzzahl zwischen 1 und 99 als Prozentsatz verwenden. Wenn der Prozentsatz weggelassen oder ungültig ist, wird automatisch der letzte bekannte gültige Prozentsatz für target.exe verwendet (wenn dies das erste Mal für target.exe ist, wird die Standardreduzierung von 33% angewendet, sofern kein Prozentsatz angegeben ist). Beachten Sie, dass BES beim Starten über die Befehlszeile das Ziel überwacht / begrenzt und nicht nur begrenzt.

Diogo
quelle
Battle Encoder Shirase ist der coolste Name für eine Software aller Zeiten
Journeyman Geek
5
Was hat stressmit dieser Frage zu tun? Es werden neue Prozesse hinzugefügt, die eine feste Menge an Prozessorzeit verbrauchen, aber die Frage wollte eine vorhandene Anwendung einschränken.
Ben Voigt