cgrps ps いらなそうだから削除しよう
— k1LoW (@k1LoW) 2018年4月30日
(主に自分に)来たる大量コンテナ時代に向けて作ったcgrpsですが、試験運用をしていて気づきがありました。
今回は新たに作成したサブコマンド 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哲学なコマンドに近づけたかと思います。