【シーグループス】

cgroups(リソース制御) とは?

💡 プロセスに「食べ放題」ではなく「定食」を出す仕組み
📌 このページのポイント
cgroups — プロセスグループのリソース制御 / (root cgroup) system.slice CPU: 60% / Mem: 4GB nginx.service mysql.service user.slice CPU: 30% / Mem: 2GB user-1000 user-1001 batch.slice CPU: 10% / Mem: 1GB backup.service cleanup.timer cpu memory io (blkio) pids Docker / Kubernetes のリソース制限も内部で cgroups を使用
cgroups の階層構造のイメージ
ひよこ ひよこ

一つのプロセスが暴走してサーバー全体が重くなるのを防ぎたいんだけど…

ペンギン先生 ペンギン先生

まさにcgroupsの出番だよ。特定のプロセスやプロセスグループに「CPUは50%まで、メモリは2GBまで」のような制限をかけられるんだ。

ひよこ ひよこ

ulimitとは何が違うの?

ペンギン先生 ペンギン先生

ulimitプロセス単体の制限だけど、cgroupsはプロセスの「グループ」全体を制御できるんだ。たとえばWebアプリのワーカープロセスが10個あったら、その10個まとめてメモリ4GBまでと制限できる。ulimitだと1プロセスずつしか制限できないからね。

ひよこ ひよこ

Dockerと関係あるって聞いたんだけど?

ペンギン先生 ペンギン先生

Dockerコンテナの--memoryや--cpusオプション、あれはまさにcgroupsを使っているんだよ。docker run --memory=512m で512MBに制限すると、裏側ではcgroupsの設定が作られる。KubernetesリソースリミットもCgroupsだね。

ひよこ ひよこ

普段のサーバー運用でも使う場面はある?

ペンギン先生 ペンギン先生

systemdとcgroupsは統合されているから、実はすでに使っているんだ。systemctl show nginx.service でCPUやメモリの制限値が確認できるよ。MemoryMax=1G のようにユニットファイルに書けば、そのサービスのメモリ使用量を1GBに制限できる。cgroups v2ではPSI(Pressure Stall Information)という仕組みでリソース不足の「圧力」を数値化できるようになって、より賢いリソース管理ができるようになっているよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「cgroups」って出てきたら「プロセスリソース使用量を制限するLinuxカーネル機能」と思えればだいたいOK!
📖 おまけ:英語の意味
「control groups」 = 制御グループ
💬 プロセスを「グループ」にまとめて「制御」する仕組みだよ
← 用語集にもどる