CPU使用量を減らすために、長期実行ジョブを一時停止/実行します。

CPU使用量を減らすために、長期実行ジョブを一時停止/実行します。

mvが必要な大容量ファイルがありますが、Nice -n19を使用してもサーバーのパフォーマンスに影響を与えるようです。

1つのオプションは、プロセスを「チャンク」単位で実行することです。つまり、数秒間コマンドを実行してから数秒間スリープ状態にしてから、プロセスを再起動します。

コマンドラインでこれを行う方法や、より良い選択肢がありますか?現在のCtrl Zとfgを手動で実行します。

答え1

mvI / Oボトルネックは通常、多くのCPUサイクルを必要としないため、(暗号化/暗号解読が含まれていない限り)パフォーマンスに影響を与える可能性があります。niceジョブがCPUで実行されるように、ジョブリストのジョブのスケジュール優先順位を変更します。

niceだから試してはいけません(カーネル> 2.6.25の場合)。

ionice -c3 mv <src> <dest>

~からionice -h

 ionice [options] <command>
   -c, --class <class>    name or number of scheduling class,
                      0: none, 1: realtime, 2: best-effort, 3: idle

~からman ionice

 Idle   A program running with idle I/O priority will only get disk time 
        when no other program has asked for disk I/O for a defined grace 
        period.  The impact of an idle I/O process on normal system activity
        should be zero.

答え2

それは次のとおりです。

$command & pid=$!
while kill -STP -$pid && sleep $interval && kill -CONT -$pid && sleep $interval; do :; done

これを行うことができます。

ジョブ制御は実際にこれら2つの信号(SIGSTPとSIGCONT)を送信するため、これは基本的に手動で実行されるジョブ制御です。

関連情報