Posted at

プロセスのリソース制限をさせる『rcon』

More than 1 year has passed since last update.


概要

どうも。はにです。あまり専門ではないのでわかりませんが、双極性障害なんじゃないかと思いこむこの頃です。

さて、私はあるサービスを運用しています。ところが、現在はサービスのプロセスが仮想マシン上でぐちゃぐちゃして稼動しているのでいろいろな意味でよくないです。だから整理する方法を考えています。

んで、見つけたのが『rcon』

プロセスのi/oやCPUを制限できるらしいです。メンテされておらず、動くか怪しいので検証してみます。


環境

Ubuntu 16.04


導入

apt install rake bison flex libpam-dev 

git clone https://github.com/matsumotory/rcon

cd rcon
#ビルド
rake

ビルドは多少待たされます。

終わると

shell

mruby/bin/rcon



にビルド物はできています。

(信用できれば、使ってどうぞ。http://haniokasai.com/file/binary/rcon__linux-x86_64.tgz)


テスト


ヘルプ

 ./rcon --help

Usage: rcon [options] --user username --command "yes >> /dev/null"
--cpu VAL
default: 30 (%)
--memory VAL
default: 512000000 (MiB)
--read VAL
default: 10000000 (Byte/sec)
--write VAL
default: 10000000 (Byte/sec)
--group VAL
default: rcon
--dev VAL
default: 8:0
--pids VAL
default: nothing
--version


CPU制限、ユーザーusernameで実行する。yesコマンドを10%に制限。

./rcon --user username --command "yes >> /dev/null" --cpu 10

top
#####
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13511 username 20 0 8300 812 744 R 9.9 0.0 0:12.08 yes
#####


ここで重要なポイントがあります。--userで必ずLinuxユーザーを指定しないといけないのです。ですから、rootじゃないと動かないかと、、、。

ちゃんと機能してますね。動かしてる間、±0.6%でおさまってました。


i/o制限、ユーザーusernameで実行する。ddを1M/sに制限。

sudo ./rcon --user username --command "dd if=/dev/zero of=tempfile bs=1M count=1000 oflag=direct" --write 1024000

iotopは壊れてた。


結局こればかりは動作してるか確認するすべがなく、、、。


まとめ

本記事では、プロセスに各種制限を書けることが容易であることを示した。

自らリソース制限をかけられないソフトにとっては役立つだろうし、cpulimitに比べて圧倒的に柔軟性もあるし、利用価値が高い。なにかホリホリしてる人にいいかもしれない、例えばminerdとか。


参考文献

https://blog.yuuk.io/entry/diy-container?amp=1