Linux
rcon

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

概要

どうも。はにです。あまり専門ではないのでわかりませんが、双極性障害なんじゃないかと思いこむこの頃です。
さて、私はあるサービスを運用しています。ところが、現在はサービスのプロセスが仮想マシン上でぐちゃぐちゃして稼動しているのでいろいろな意味でよくないです。だから整理する方法を考えています。
んで、見つけたのが『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