プロセスの CPU 使用率を制限する方法は?

プロセスの CPU 使用率を制限する方法は?

プロセスの CPU 使用率を、たとえば 10% に制限したいと思います。

これを実現する 1 つの方法は、プロセスを 1 分ごとに 6 秒間連続して実行し、残りの時間は一時停止することです。

nice でプロセスの優先度を変更するつもりはありません。

答え1

CPU制限(新しいgithubリンクはこちら) は、この作業に適したツールのようです。このツールを使用すると、PID、プロセス名、または絶対位置によってプロセスのプロセッサ使用率を制御し、プロセッサ使用率を合計のパーセンテージで設定できます。

SourceForgeページのドキュメントより -

使用例

実行可能名でプロセス「bigloop」の CPU 使用率を 40% に制限します。

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

PID によってプロセスを 55% の CPU に制限します。

cpulimit --pid 2960 --limit 55 

コマンドラインでプロセスを起動し、40% に制限します (開発バージョンのみ):

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

Cyber​​citi.bizには方法それはまた、あなたが使用できるかもしれないことを示しています

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

--exe などの代わりに。

マルチプロセッサの場合は、100 * コア数に基づいてパーセンテージを設定する必要があります。つまり、デュアルシステムでは最大150、クアッドコアでは最大200のパーセンテージを設定できます。

答え2

オペレーティング システムを指定していないため、ここでは Windows 用のオプションと Linux 用のオプションをそれぞれ 1 つずつ示します。

Linuxの場合:

使用ストレス:

stress は、POSIX システム用の意図的にシンプルなワークロード ジェネレータです。設定可能な量の CPU、メモリ、I/O、およびディスク ストレスをシステムに課します。C で記述されており、GPLv2 ライセンスのフリー ソフトウェアです。

次に呼び出し例を示します。2 つの CPU バウンド プロセス、1 つの I/O バウンド プロセス、および 1 つのメモリ アロケータ プロセスを指定して、システムに 4 の負荷平均を適用します。

   $ 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

Windowsの場合:

使用BES – バトルエンコーダー シラセ 1.4.5 / 1.5.2:

プロセスごとの CPU 使用率を制御する無料ソフトウェア。「アクティブ」ソフトウェア CPU クーラー。BES は、ターゲットとするプロセスの CPU 使用率を調整する小さなツールです。たとえば、CPU を 100% 使用するプロセスの CPU 使用率を 50% (または任意の割合) に制限できます。これにより、バックグラウンドで CPU を集中的に使用する処理を実行しながら、他のプログラムを快適に使用できます。

CPU 負荷を制限することで、CPU が熱くなりすぎたときにすぐに冷却することもできます。これは「アクティブ」なソフトウェア CPU クーラーです。従来のソフト クーラーは、CPU がアイドル状態のときにスリープ状態にすることで CPU のエネルギーを節約します。CPU がアイドル状態になるまで受動的に待機します。BES はより積極的です。つまり、「加熱」プロセスを遅くすることで、つまり定期的に CPU を短時間アイドル状態にすることで CPU を冷却します。(ただし、この目的で BES を頻繁に使用する必要がある場合は、より優れたハードウェア クーラーをインストールする必要があります。実際に、最初に試すべきことは、ヒート シンクの周りのほこりを取り除くことです (以下を参照)。アクティブ ソフト クーリングは興味深いハックかもしれませんが、結局のところ、単なる回避策です。一方、アプリケーションが CPU を無意味に 100% 使用している場合は、BES に任せてください。)

ここに画像の説明を入力してください

Windows コマンドラインを使用して自動化することもできます。

次のコマンド ラインは、BES に target.exe を監視し、target.exe の実行が開始されると CPU 使用率を調整して、target.exe が最大で CPU (100 − パーセンテージ) % しか使用できないように指示します。

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

オプションで、パーセンテージとして 1 ~ 99 の整数を使用できます。パーセンテージが省略されているか無効な場合は、target.exe の最新の有効なパーセンテージが自動的に使用されます (target.exe をターゲットにするのが初めての場合は、パーセンテージが指定されていない限り、デフォルトの削減 33% が適用されます)。コマンド ラインから起動すると、BES はターゲットを制限するだけでなく、監視/制限することに注意してください。

答え3

Windowsの場合:これは @Diogo の回答の単なる拡張です。

Windows ユーザーは、ショートカットを 1 つクリックするだけで、目的のターゲット プログラムを目的の CPU スロットルで自動的に実行したいと考えていましたが、バッチ ファイルに関する手順がもう少し必要であり、推奨されるコマンド ライン内の [percentage] と [--minimize] の部分を正確に実装する方法に関して説明が必要であることがわかりました。

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

私が最終的に使用した方法は次のとおりです。Windowsバッチファイルテキスト エディターでファイルを作成し、"[name].bat" (例: something.bat) という名前を付けます。ファイル内に次の内容を入力します。

@echo off 
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"

どこ:

  • 「開始」""を使用すると、ベス実行するターゲットプログラム同時に
  • 「C:\path\to\bes.exe」は引用符内のBESプログラムへの正確なパスです。
  • 「D:\path to\target.exe」はCPUスロットルしたいプログラムへの正確なパスです。引用符内は、
  • 90削減率です。この場合はCPU制限を100%に減らすことを意味します。90= 10%
  • -m は、BES プログラムを最小化した状態で起動します (BES の指示に従って: "--minimize オプション (略して -m) は、BES を最小化した状態で起動するように指示します (システム トレイに送信)。

次に、生成された .bat ファイルをダブルクリックすると、BES によって目的の CPU レベルに自動的に調整されながら、対象プログラムが実行されます。

関連情報