4

サーバーの速度が低下しないように、CPU を集中的に使用するシステム プロセスを低い優先度で開始する必要があります。Linuxでこれを行うにはどうすればよいですか?

これは次の質問に似ています: Runtime.exec / ProcessBuilder.start を使用して低優先度で Java プロセスを開始しますか? ただし、Windows ではなく Linux を除きます。プロセスの開始後にプロセスの優先度が変更されても問題ありません (遅延が大きくない限り)。

4

1 に答える 1

10

を使用してコマンドを実行します/usr/bin/nice。例えば:

$ /usr/bin/nice -n 10 somecommand arg1 arg2

somecommand arg1 arg2+10 のナイスネスで実行されます。(Unix / Linux では、niceness 値が大きいほど、スケジューラーの優先度が低くなります。nice通常、範囲は -19 から +19 です。)

このソリューションはプラットフォーム固有であることに注意してください。Linux および Unix システムでのみ動作します...


ファローアップ

ProcessBuilder は、通常のコマンドと同じようにインスタンス化する必要があります。すなわち

    new ProcessBuilder("nice", "-n", "10", "somecommand", "arg1", "arg2");

コマンド/引数をいつ/どのように分割するかについて、黒魔術はありません。コマンド (例: nice) 構文は、その引数がどうあるべきかを決定し、シェル コマンド ラインでどのように引用するか、およびProcessBuilder(またはその問題のネイティブexec*syscalls) を使用するときにどのように提供するかの両方を決定します。

waitFor()(AFAIK)/usr/bin/niceコマンドはexec(ではない)を使用して提供されたコマンドを実行するためfork、 etc に問題があるとは思いません。execやってみて ...

于 2012-01-29T13:43:50.187 に答える