Ubuntu12.10でCPU使用率を制限する方法
サーバーがクラッシュするのを防ぐために、CPU使用率を制限することが重要になる場合があります。
これは、crontabで実行している可能性のあるカスタムスクリプトで特に役立ちます。
まず、Ubuntu12.10×64ドロップレットを起動します。
cpulimitをインストールします
apt-get -y install cpulimit
使用構文
Usage: cpulimit TARGET [OPTIONS...] TARGET must be exactly one of these: -p, --pid=N pid of the process -e, --exe=FILE name of the executable program file -P, --path=PATH absolute path name of the executable program file OPTIONS -b --background run in background -l, --limit=N percentage of cpu allowed from 0 to 100 (mandatory) -v, --verbose show control statistics -z, --lazy exit if there is no suitable target process, or if it dies -h, --help display this help and exit
ベンチマークCPU使用率
cpulimitを使用せずにCPU使用率をベンチマークしてみましょう。
これは、アプリケーションでCPUを利用する方法の例です。
md5sum /dev/zero &
この’フォーク’md5sumプロセスをバックグラウンドに。 topでCPU使用率を確認できるようになりました。
ご覧のとおり、ほぼ100 % o fのCPUリソースを消費しています(このドロップレットに1つのCPUコアがある場合)。
fg を使用してこのプロセスをフォアグラウンドにし、 CTRL +Cでキャンセルできます。
cpulimitでCPU使用率を制限する
これで、 cpulimit をテストして、実際に想定どおりに動作するかどうかを確認できます。
CPU使用率を40%に制限し、同じコマンドを実行しましょう。
cpulimit -l 40 md5sum /dev/zero &
案の定、40%に制限されています:
マルチコアドロップレット
複数のプロセッサを搭載したドロップレットでは、各プロセスのCPU使用率を制限する必要があります。
これは、制限なしで4つのプロセスをフォークし、サーバー上で同時に実行できるようにするスクリプトです。
for j in `seq 1 4`; do md5sum /dev/zero & done
各CPUコアはほぼ100% ofのリソースを使用しています。
top - 23:29:28 up 7 days, 13:54, 1 user, load average: 0.80, 1.08, 0.53 Tasks: 77 total, 5 running, 72 sleeping, 0 stopped, 0 zombie %Cpu0 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 93.2 us, 6.8 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 95.0 us, 5.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 98.3 us, 1.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 8178228 total, 380196 used, 7798032 free, 28136 buffers KiB Swap: 0 total, 0 used, 0 free, 251708 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8400 root 20 0 7172 612 520 R 101.7 0.0 0:03.10 md5sum 8401 root 20 0 7172 612 520 R 101.7 0.0 0:03.10 md5sum 8399 root 20 0 7172 616 520 R 98.4 0.0 0:03.06 md5sum 8402 root 20 0 7172 612 520 R 98.4 0.0 0:03.09 md5sum
各プロセスにcpulimitを使用するには、次のコマンドの前に配置します。
for j in `seq 1 4`; do cpulimit -l 40 md5sum /dev/zero & done
現在、各プロセスは各スレッドを最大40 % o f使用し、サーバーに過負荷をかけません。
top - 23:31:03 up 7 days, 13:55, 1 user, load average: 2.68, 1.72, 0.82 Tasks: 81 total, 5 running, 76 sleeping, 0 stopped, 0 zombie %Cpu0 : 39.4 us, 0.7 sy, 0.0 ni, 59.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st %Cpu1 : 38.7 us, 1.7 sy, 0.0 ni, 59.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 39.4 us, 1.3 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 39.4 us, 1.7 sy, 0.0 ni, 58.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 8178228 total, 380452 used, 7797776 free, 28144 buffers KiB Swap: 0 total, 0 used, 0 free, 251708 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8442 root 20 0 7172 616 520 R 40.4 0.0 0:06.10 md5sum 8440 root 20 0 7172 612 520 R 40.0 0.0 0:06.09 md5sum 8435 root 20 0 7172 616 520 R 39.7 0.0 0:06.09 md5sum 8436 root 20 0 7172 612 520 R 39.7 0.0 0:06.10 md5sum
そして、あなたはすべて完了です!