CPULimit はまさにあなたが必要としているものです。プログラムを開始し、プログラム名または PID に対して cpulimit を実行して、制限するパーセンテージを指定します。
次のコマンドは、PID 7777 でプロセスの CPU 使用率を 5% に制限します。
cpulimit -p 7777 -l 5
または、実行可能ファイルの名前を使用できます:
cpulimit -e myprogram -l 5
または実行可能ファイルの絶対パス:
cpulimit -P /path/to/myprogram -l 5
パーセンテージはすべてのコアのものであることに注意してください。したがって、4 つのコアがある場合は、400% を使用できます。
実行中のプロセスを調整して、優先順位を増減することができます (いわゆる「適切な値」)。 UNIX の優先度のスケールはやや直感に反することに注意してください。負の値は、プロセスが並行プロセスよりも優先されることを意味します。つまり、「より多くの」優先度があります。
したがって、次の方法で PID を指定してプロセスを「遅く」することができます。
# lower priority of a process
renice +1 "PID"
これを実行するたびに、プロセス「nice value」が 1 ずつ増えます。 +1
以外の整数値を使用できます もちろんです。
コマンド nice を使用すると、nice 値を +10 に調整してプロセスを開始できます (これをオプション -n
で変更します)。 )。例:
# start a CPU-intensive task with low priority
nice ./cpu-hog
ただし、「nice 値」は、スケジューラがシステム内の他のプロセスよりも特定のプロセスの実行を優先する程度に影響するだけです。コンピュータが基本的にアイドル状態の場合、1 つのプロセスの「nice 値」を上げても そう はなりません。 そのプロセスが 100% の CPU を使用しないようにします。 getpriority(2) マンページから引用します:(強調は私が追加しました。)
<ブロック引用>それらの相対ナイス値がプロセスのスケジューリングに与える影響の程度は、Unix システムによって異なり、Linux ではカーネル バージョンによって異なります。カーネル 2.6.23 以降、Linux は、nice 値の相対的な違いがより強力な効果を持つようにするアルゴリズムを採用しました。これにより、非常に低いナイス値 (+19) が発生し、プロセスにほとんど CPU が提供されなくなります 他のプロセスがある場合は常に _システム上の優先度の高い負荷._
この理由は、プロセスが UNIX のようなカーネルで実行される方法にあります。カーネルがプロセスの実行を決定するたびに、そのプロセスは特定の (固定された短い) 期間、CPU コアを完全に制御します。 「適切な値」は、kernelscheduler がプロセスにタイムスロットを与える頻度に影響を与える可能性がありますが、スケジュールが設定されると、プロセスが一定時間邪魔されずに実行されるという事実を変更することはできません。
したがって、システム内に CPU アクセスを競合できるプロセスが他にない場合、CPU を遅くする以外に、プロセスの実行を遅くする方法はありません。
cgroup まさにこの理由で作成されました。
http://www.kernel.org/doc/Documentation/cgroups/http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm
それらに慣れるには少し時間がかかります。設定するには root アクセスが必要だと思いますが、すべてスクリプト化できます。新しい Ubuntu には .conf ファイルがあるため、独自のスクリプトを作成する必要はありません。 10.10 についてはわかりません。
開始するのに最適な場所は、この回答にあります:https://askubuntu.com/a/94743/170177
cgroups はまだ活発に開発されているため、現在のカーネルでは一部の機能が利用できない可能性があることに注意してください。
cgroup の cpu.shares の使用 良いことは何もしません 価値はありません。実際にプロセスを抑制したいようですが、これは確実に実行できます。
スクリプトを 1 つまたは 2 つ使用するか、/etc/cgconfig.conf を編集する必要があります。 必要なパラメータを定義します。
具体的には、値 cpu.cfs_period_us を編集します。 および cpu.cfs_quota_us .その後、プロセスは cpu.cfs_quota_us に対して実行が許可されます cpu.cfs_period_us あたりのマイクロ秒
例:
cpu.cfs_period_us =50000 の場合 そして cpu.cfs_quota_us =10000 その場合、他に何が起こっていても、プロセスは最大 CPU 時間の 20% を受け取ります。
このスクリーンショットでは、プロセスに CPU 時間の 2% を与えています:
プロセスに関する限り、100% で実行されています。
設定 cpu.shares 一方、アイドル状態の CPU 時間の 100% を使用することができます。
この同様の例では、cpu.shares =100 というプロセスを指定しました。 (1024 件中):
ご覧のとおり、プロセスはまだすべてのアイドル状態の CPU 時間を消費しています。
参照:
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.htmlhttp://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups. html