Shiraude Code Docs
用語2026年10月5日cgroupLinuxコンテナリソース制限systemd

cgroupとは?プロセスの使える資源を区切るしくみ

cgroup(シーグループ)は、Linuxに備わっている「プログラムが使えるコンピュータ資源の量を制限したり、まとめて管理したりするしくみ」です。正式には control groups(コントロールグループ)と言って、cgroup はその略称です。

資源というのは、CPU(計算する力)、メモリ(作業用の記憶領域)、ディスクの読み書き速度といったものを指します。パソコンやサーバーの中では、たくさんのプログラムが同時に動いていて、これらの資源を取り合っています。cgroup は、その取り合いにルールを作る役割を持っています。

シェアハウスの電気代とブレーカーで考える

シェアハウスを想像してみてください。住人が5人いて、全員が同じ電気の契約を共有しています。誰か1人が大型のヒーターを3台つけっぱなしにすると、ブレーカーが落ちて家全体が停電します。悪気があるわけではなくても、1人の使いすぎが全員に迷惑をかけてしまう。

そこで、部屋ごとに「この部屋は最大でここまで」という小さなブレーカーを付けることにします。すると、1人が使いすぎても落ちるのはその部屋のブレーカーだけで、他の住人の生活は守られます。

cgroup がやっているのは、まさにこれです。プロセス(動いているプログラム)をグループにまとめて、そのグループごとに「CPUはここまで」「メモリはここまで」という上限を設定します。上限を超えようとしたプロセスは、そのグループの中だけで制限を受け、他のグループには影響が及びにくくなります。

cgroupができること

cgroup の役割は、大きく分けて次のようなものです。

  • 制限する — このグループはメモリを1GBまで、CPUは全体の50%まで、といった上限を決める
  • 優先順位をつける — 資源が足りなくなったとき、どのグループを優先して動かすかを決める
  • 使用量を記録する — どのグループがどれだけ資源を使ったかを計測する
  • まとめて操作する — グループ単位でプロセスを一時停止したり、停止させたりする

「制限」だけでなく「計測」もできるのがポイントで、クラウドサービスの従量課金で使用量を測るような用途にも関わってきます。

どこで使われているのか

cgroup という名前を直接目にする機会は、普段はあまりないかもしれません。けれど、知らないうちにお世話になっていることが多い技術です。

代表的なのがコンテナです。Docker のようなツールでコンテナを起動するとき、「このコンテナはメモリ512MBまで」といった指定ができますが、その制限を実際に効かせているのが cgroup です。コンテナというのは、乱暴に言えば「プロセスの見える範囲を区切るしくみ」と「使える資源を区切るしくみ」の組み合わせで成り立っていて、後者を担当しているのが cgroup だと考えるとイメージしやすいと思います。

また、Linux のシステム管理の中核である systemd も、サービスごとに cgroup を割り当てて管理しています。サーバーで動く各サービスが、お互いの資源を食い荒らさないように整理されているわけです。

なぜ知っておくと役に立つのか

実務でよくあるのが、「コンテナが突然落ちた」という場面です。ログを見ると OOM(Out Of Memory、メモリ不足)で強制終了されている。これは、cgroup で設定したメモリ上限にプログラムが到達して、カーネルがそのグループ内のプロセスを止めた結果です。

このとき、サーバー全体のメモリにはまだ余裕があることも珍しくありません。「全体は空いているのに落ちた」という一見おかしな状況も、cgroup という部屋ごとのブレーカーがあると知っていれば納得できます。原因は全体のメモリ不足ではなく、そのグループに割り当てられた枠を超えたことなんですね。

こういう仕組みを頭の片隅に置いておくと、トラブルシューティングのときに見るべき場所の見当がつきやすくなります。

cgroup v1 と v2

cgroup には v1 と v2 という2つの世代があります。v1 は CPU 用、メモリ用といった具合に資源の種類ごとに別々の階層を持つ作りで、柔軟な反面、管理が複雑になりがちでした。v2 ではこれが単一の階層に統一され、扱いやすく整理されています。

近年の主要な Linux ディストリビューションでは v2 が標準になっていることが多く、これから学ぶなら v2 を前提に考えるのが自然です。ただし環境によっては v1 が使われていることもあるので、設定ファイルの場所や書き方が資料と違う場合は、どちらの世代かを確認してみるとよいでしょう。

このページは役に立ちましたか?