
Ich möchte die CPU-Auslastung eines Prozesses auf beispielsweise 10 % begrenzen.
Dies könnte beispielsweise dadurch erreicht werden, dass der Vorgang jede Minute 6 Sekunden lang ununterbrochen ausgeführt und die restliche Zeit angehalten wird.
Ich möchte die Prozesspriorität nicht mit „Nice“ ändern.
Antwort1
CPU-Begrenzung(neuereGitHub-Link hier) scheint das richtige Tool für diese Aufgabe zu sein – Sie können damit die Prozessorauslastung eines Prozesses nach PID, Prozessname oder absolutem Standort steuern und seine Prozessorauslastung als Prozentsatz der Gesamtauslastung festlegen.
Aus den Dokumenten auf der Sourceforge-Seite -
Anwendungsbeispiele
Begrenzen Sie den Prozess „Bigloop“ anhand des ausführbaren Namens 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 einewie manDas bedeutet auch, dass Sie möglicherweise
-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 dass Sie für Multiprozessoren den Prozentsatz auf der Grundlage von 100 * Anzahl der Kerne festlegen sollten - ein Dual-Core-System kann also Prozentsätze bis zu 150 zulassen und ein Quad-Core bis zu 200
Antwort2
Da Sie Ihr Betriebssystem nicht angegeben haben, werde ich hier einfach eine Option für Windows und eine weitere für Linux angeben:
Für Linux:
VerwendenStress:
stress ist ein bewusst einfacher Workload-Generator für POSIX-Systeme. Er belastet das System mit einer konfigurierbaren Menge an CPU-, Speicher-, I/O- und Festplattenlast. Er ist in C geschrieben und steht als freie Software unter der GPLv2-Lizenz.
Hier ist ein Beispielaufruf: Durch die Angabe von zwei CPU-gebundenen Prozessen, einem I/O-gebundenen Prozess und einem Speicherzuweisungsprozess wird dem System eine durchschnittliche Last von vier auferlegt.
$ 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:
VerwendenBES – Kampf-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 von Ihnen „anvisierten“ Prozess drosselt: Sie können beispielsweise die CPU-Auslastung eines Prozesses, der die CPU zu 100 % nutzen würde, auf 50 % (oder einen beliebigen Prozentsatz) beschränken. Auf diese Weise können Sie bequem andere Programme verwenden, während Sie im Hintergrund etwas CPU-intensives tun.
Durch die Begrenzung der CPU-Last können Sie Ihre CPU auch sofort abkühlen, wenn sie zu heiß wird. Es handelt sich um einen „aktiven“ Software-CPU-Kühler. Herkömmliche Soft-Kühler sparen CPU-Energie, indem sie die CPU im Leerlauf in den Ruhezustand versetzen. Sie warten passiv, bis die CPU in den Leerlauf geht. BES ist aggressiver: Es kühlt die CPU, indem es den „Heizungsprozess“ verlangsamt, d. h. die CPU wird regelmäßig für kurze Zeit in den Leerlauf gezwungen. (Sie sollten jedoch einen besseren Hardware-Kühler installieren, wenn Sie BES häufig für diesen Zweck verwenden müssen. Tatsächlich sollten Sie als Erstes versuchen, den Staub um Ihren Kühlkörper zu entfernen (siehe unten). Aktive Soft-Kühlung könnte ein interessanter Hack sein, ist aber letztendlich nur ein Workaround. Wenn Ihre Anwendung die CPU hingegen zu 100 % sinnlos nutzt, lassen Sie BES die Arbeit erledigen!)
Sie können es auch mit der Windows-Befehlszeile automatisieren:
Die folgende Befehlszeile weist BES an, target.exe zu überwachen und – wenn target.exe gestartet wird – die CPU-Auslastung zu drosseln, so dass target.exe nur maximal (100 − Prozentsatz) CPU-Auslastung zulässt:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
Optional können Sie als Prozentsatz eine Ganzzahl zwischen 1 und 99 verwenden. Wenn der Prozentsatz ausgelassen wird oder ungültig ist, wird automatisch der letzte bekannte gültige Prozentsatz für target.exe verwendet (wenn target.exe zum ersten Mal als Ziel verwendet wird, wird die Standardreduzierung von 33 % angewendet, sofern kein Prozentsatz angegeben ist). Beachten Sie, dass BES beim Start über die Befehlszeile das Ziel überwacht/begrenzt und nicht nur begrenzt.
Antwort3
Für Windows:(Dies ist lediglich eine Erweiterung der Antwort von @Diogo.)
Als Windows-Benutzer, der nur auf eine einzige Verknüpfung klicken wollte, um das gewünschte Zielprogramm automatisch mit der gewünschten CPU-Drosselung auszuführen, stellte ich fest, dass dazu ein paar mehr Schritte mit einer Batchdatei erforderlich waren und einige Erläuterungen erforderlich waren, wie genau die Teile [percentage] und [--minimize] in der vorgeschlagenen Befehlszeile implementiert werden sollten:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
Die Methode, die ich letztendlich verwendet habe, ist wie folgt. Erstellen Sie ein WindowsBatchdatei, erstellen Sie eine Datei mit einem Texteditor und nennen Sie sie „[name].bat“ (z. B.: etwas.bat). Geben Sie in die Datei Folgendes ein:
@echo off
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"
Wo:
- start "", ermöglicht sowohl dieBESund das auszuführende Zielprogrammgleichzeitig.
- "C:\Pfad\zu\bes.exe" ist der genaue Pfad zum BES-Programm innerhalb der Anführungszeichen,
- "D:\Pfad zu\target.exe" ist der genaue Pfad zu dem Programm, mit dem Sie die CPU drosseln möchten. Innerhalb der Anführungszeichen,
- 90ist ein Prozentsatz der Reduzierung, in diesem Fall bedeutet die Reduzierung des CPU-Limits auf 100-90= 10 %
- -m dient zum minimierten Starten des BES-Programms (gemäß BES-Anweisungen: "Die Option --minimize oder kurz -m weist BES an, minimiert zu starten (an die Taskleiste gesendet)."
Durch Doppelklicken auf die resultierende BAT-Datei wird das Zielprogramm ausgeführt, während die CPU-Leistung mit BES automatisch auf die gewünschte Stufe gedrosselt wird.