cgrpsの実践を考える

(主に自分に)来たる大量コンテナ時代に向けて作ったcgrpsですが、試験運用をしていて気づきがありました。

github.com

今回は新たに作成したサブコマンド cgrps pids について紹介します。

cgrps pids を使って他のコマンドと連携する

実際に使ってみて気づいたことに

自分で作ったcgrps psコマンドよりpsコマンドのほうが強力

という当たり前といえば当たり前の事実が判明しました。

で、よく考えたらpsコマンドはPIDを引数に渡せるので、cgroup単位のPIDのリストを出力するコマンドを作成して他のコマンドとパイプで連携するようにしました。

ということで cgrps ps を削除。新たに cgrps pids を作成しました。

ps との連携

psコマンドは --pid (-p) オプションにPIDを複数渡すことができます。

cgrps pids は複数のcgroupを引数に渡せるので、cgrps ls -> [peco] -> cgrps pids の結果をpsコマンドに渡すことで絞り込んだ結果を得ることができます。

$ ps u --pid $(cgrps ls | peco | cgrps pids | xargs)

pidstat との連携

pidstatコマンドも-p オプションにカンマ区切りでPIDを複数渡すことができます。

任意のcgroupのstatを5秒間隔で取得するとしたら以下のようなコマンドで確認可能です。

$ pidstat -dru -h -p $(cgrps ls | peco | cgrps pids | xargs | tr ' ' ',') 5

lsof との連携

lsofコマンドも-p オプションにカンマ区切りでPIDを複数渡すことができます。

$ lsof -Pn -i -a -p $(cgrps ls | peco | cgrps pids | xargs | tr ' ' ',')

というわけで

cgrpsの実践を試した結果、 cgrps pids を作成することになりました。

少しは「1つのことをうまくやる」「協調して動く」UNIX哲学なコマンドに近づけたかと思います。