弊社のmatsumotoryさんが作られたツールrconを試してみました。

http://hb.matsumoto-r.jp/entry/2015/12/02/133448

cgroupを利用したワンバイナリのツールで、IOやCPU、メモリーなどのリソースを制限できます。
cgroupは過去に検証したことがあったのですが、便利だけど、やはり手間がかかるイメージでした。
しかしrconはLinuxコマンドのように扱えるので、便利そうだと思い試してみました。

試した環境

CentOS6.7
Vagrant
Ruby2.2.3

事前に入れておくと良いパッケージ

私の環境はCentOSのminimal isoを利用したイメージだったので、色々パッケージが不足してました。最低限下記は必要かと思われます。

$ yum install libcgroup gcc zlib zlib-devel bison autoconf aclocal automake c++ gcc-c++ flex pam pam-devel

導入

導入については、README.mdを見ればすぐに分かるのですが、rakeを使ってビルドすれば、OKです。

README通りにやってみた

$ yes > /dev/null

yesコマンドを実行すると、そのままCPUが100%食われてしまいます。

before_rcon_yes

rconを使って、実行してみます。

$ rcon --user inamuu --command "yes > /dev/null" --cpu 10

結果

CPU使用率が10%まで抑えられていました。明確に数字にあらわれるので感動します。

after_rcon_yes

また、下記のように既に実行されているプロセスに対しても制限をかけることができました。

$ yes > /dev/null &
$ rcon --pids "`pgrep yes`" --cpu 10

今回はテストしませんでしたが、ディスクの読み書きもサイズで制限できるため、あきらかに負荷のかかる作業(ファイルを大量に削除するなど)を実施する場合は、大変便利なツールです。
また、リソースへ負荷のかかる作業をする場合は、利用してみようと思います。

カテゴリー: RubyTech