Make Tech Easier - Uncomplicating the complicated, making life easier

数値計算やデータ変換、特定のコンパイル作業など、CPU負荷の高いタイプのアプリケーションやユーティリティを動作させておくと、システム全体の反応が緩慢になることがある。マルチコアでは気にならないことも多いが、シングルコアでは単一のプロセスが原因でユーザインタラクションが緩慢になり、使えたものではない状況になることがある。

こうした場合に利用できるツールcpulimitがHow to Limit The CPU Usage of Any Process in Linux - Make Tech Easierで紹介されている。Linux向けのツールで、特定のプロセスのCPUの使用率を設定した値まで制限するというもの。簡単に扱えるツールとして参考になる。Ubuntuにおけるcpulimitのインストール例は次のとおり。

sudo apt-get install cpulimit

cpulimit(1)の使用例は次のとおり。プロセス番号と、そのプロセスに許可するCPU使用率を指定する。指定できる割合は0から100まで。対象はプロセス番号で指定できるほか、実行ファイル名(-e)やフルパスでの指定(-P)も可能。

sudo cpulimit -p プロセス番号 -l 0から100までの数値

次に簡単な実行例を示す。利用したプラットフォームはUbuntu 10.04。まず動作を確認するため、ループするだけのスクリプトintense.shを用意。intense.shを実行すると、CPU利用率が97%ほどまで上がることを確認する。

ループするだけのスクリプトintense.shを用意

intense.shを実行するとCPU利用率が使用率のほとんどがこれに費やされる

ここでcpulimit(1)を使ってintense.shに割り当てるCPU割合を30%に制限する。実行するとcpulimit(1)はフロントエンドで動作し続けるとともに、intense.shはフロントエンドからバックエンドへ移行。CPU使用率は30%前後まで制限されることを確認できる。

cpulimit(1)でintense.shのCPUの使用率を30%まで制限

cpulimit(1)を終了すると再びintense.shのCPUの使用率が97%前後まで上昇する。

cpulimit(1)を終了させると、intense.shのCPUの使用率がふたたび97%前後まで増える

cpulimit(1)を実行することで、フロントエンドで動作していたintense.shはバックエンドプロセスへ移行している。ps(1)コマンドでもその様子が確認できる。この状態でふたたびcpulimit(1)で制限を指定しても、ふたたびその指定した割合へ制限されることを確認できる。

背後で処理を進めておきたいものの、システムの反応が悪くなっては都合が悪い場合など、cpulimit(1)は便利に活用できる。