cgroupの状況を確認するコマンドcgrpsを作った

  • cgrps v0.5.0 から cgrps ps コマンドは削除しました
  • cgroup / cgroups 問題について下記に追記しました。それに伴いタイトルと文章も修正しました。

以前のエントリで書いたようにcgroupの状況を確認するコマンドはあります。

k1low.hatenablog.com

ごく普通のcgroupsの使い方であれば上記エントリにある systemd-cgtop systemd-cglslscgroup などで十分です。

しかし、 たまたまなのですが 私が関わっているプロダクト ではコンテナをフル活用しているためcgroupが大量に作成されることがあり、systemd-cgtop などではなかなか厳しいことになってきていました。

また、同じcgroup階層のサブシステムの状況は「同じグループとして」確認したいという気持ちもありました。

cgrps

というわけで、cgroupとGoの勉強がてらに cgrps というコマンドを作ってみました。

github.com

img

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はファイルシステム

開発当初は https://github.com/containerd/cgroups を使っていたのですが、表示したいものを作っていくうえで痒いところに手が届かない感じだったので(そもそも使い方が違う)、結局最後は /sys/fs/cgroup 内のファイルを直接見にいく形に変更しました。

CLK_TCK

udzuraさんの便利エントリにもあるように cpuacct.stat の値を秒単位で表示するためには クロック/秒 を知る必要があります。これをcgoを使わずにどうやって取得しようかなと考えたのですが、getconf というコマンドがだいたいのディストリビューションにあることを知って、採用させていただきました。

github.com/shirou/gopsutil ++

RedHatの資料がかなり充実している

ギョーム中にpyamaさんに教えてもらいました。

リソース管理ガイド - Red Hat Customer Portal

ギョーム中もcgrpsを作っている間もずっとにらめっこしてました。

というわけで

なかなか使う機会はないかもしれませんが、cgroupsの勉強などに是非。

ところでcgroupsなのかcgroupなのか。。。 解決しました!

cgroupの状況を確認するコマンドcgrpsを作った - Copy/Cut/Paste/Hatena

便利感ある / 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
b.hatena.ne.jp