cgroupの状況を確認するコマンドcgrpsを作った
- cgrps v0.5.0 から
cgrps ps
コマンドは削除しました- cgroup / cgroups 問題について下記に追記しました。それに伴いタイトルと文章も修正しました。
以前のエントリで書いたようにcgroupの状況を確認するコマンドはあります。
ごく普通のcgroupsの使い方であれば上記エントリにある systemd-cgtop
systemd-cgls
や lscgroup
などで十分です。
しかし、 たまたまなのですが 私が関わっているプロダクト ではコンテナをフル活用しているためcgroupが大量に作成されることがあり、systemd-cgtop
などではなかなか厳しいことになってきていました。
また、同じcgroup階層のサブシステムの状況は「同じグループとして」確認したいという気持ちもありました。
cgrps
というわけで、cgroupとGoの勉強がてらに cgrps
というコマンドを作ってみました。
cgrps
は以下のような特徴があります
- cgroupの各サブシステム内の同じ階層(例えば
/sys/fs/cgroup/cpu/my-cgroup-name
と/sys/fs/cgroup/memory/my-cgroup-name
)を同じグループとしてまとめる - 状況を確認できることに特化して、cgroupの操作系はない
使い方
基本的に peco などのフィルタリングコマンドとの併用を想定しています。
例えばあるcgroupで動いているプロセスを確認したいときは
$ cgrps ps $(cgrps ls | peco)
とすると peco
でcgroupを絞り込んで確認ができます。
当然、cgroupの階層がわかっていれば
$ cgrps ps /my-cgroup-name
としても確認可能です。
現在は cgrps ls
cgrps ps
cgrps stat
がありますが、今後はそれぞれの機能拡張( cgrps stat
も対応サブシステムが少ない )に加えて、 cgrps top
が欲しいです。あとJSON出力ですね。
勉強にちょうどいい。
余談
cgroupはファイルシステム
「そう、全てはファイルなのです」って @linyows が言ってた
— k1LoW (@k1LoW) 2018年4月15日
開発当初は https://github.com/containerd/cgroups を使っていたのですが、表示したいものを作っていくうえで痒いところに手が届かない感じだったので(そもそも使い方が違う)、結局最後は /sys/fs/cgroup
内のファイルを直接見にいく形に変更しました。
CLK_TCK
— k1LoW (@k1LoW) 2018年4月16日
udzuraさんの便利エントリにもあるように cpuacct.stat
の値を秒単位で表示するためには クロック/秒
を知る必要があります。これをcgoを使わずにどうやって取得しようかなと考えたのですが、getconf
というコマンドがだいたいのディストリビューションにあることを知って、採用させていただきました。
github.com/shirou/gopsutil ++
RedHatの資料がかなり充実している
ギョーム中にpyamaさんに教えてもらいました。
リソース管理ガイド - Red Hat Customer Portal
ギョーム中もcgrpsを作っている間もずっとにらめっこしてました。
というわけで
なかなか使う機会はないかもしれませんが、cgroupsの勉強などに是非。
ところでcgroupsなのかcgroupなのか。。。 解決しました!
cgroupの状況を確認するコマンドcgrpsを作った - Copy/Cut/Paste/Hatenab.hatena.ne.jp便利感ある / cgroup(s?) の問題は <a href="http://tenforward.hatenablog.com/entry/20160425/1461583475" target="_blank" rel="noopener nofollow">http://tenforward.hatenablog.com/entry/20160425/1461583475</a> などご参照のこと
2018/04/26 13:02
"明確に複数の個別の control groups" を扱うコマンドなので cgrps で良かったんだ
— k1LoW (@k1LoW) 2018年4月26日