第23章 コントロールグループを使用したアプリケーションのシステムリソース制限の設定
コントロールグループ (cgroups
) カーネル機能を使用すると、アプリケーションのリソース使用状況を制御して、より効率的に使用できます。
cgroups
は、以下のタスクで使用できます。
- システムリソース割り当ての制限を設定します。
- 特定のプロセスへのハードウェアリソースの割り当てにおける優先順位を設定する。
- 特定のプロセスをハードウェアリソースの取得から分離する。
23.1. コントロールグループの概要
コントロールグループ の Linux カーネル機能を使用して、プロセスを階層的に順序付けされたグループ (cgroups
) に編成できます。階層 (コントロールグループツリー) は、デフォルトで /sys/fs/cgroup/
ディレクトリーにマウントされている cgroups
仮想ファイルシステムに構造を提供して定義します。
systemd
サービスマネージャーは、cgroups
を使用して、管理するすべてのユニットとサービスを整理します。/sys/fs/cgroup/
ディレクトリーのサブディレクトリーを作成および削除することで、cgroups
の階層を手動で管理できます。
続いて、カーネルのリソースコントローラーは、cgroups
内のプロセスのシステムリソースを制限、優先順位付け、または割り当てることで、これらのプロセスの動作を変更します。これらのリソースには以下が含まれます。
- CPU 時間
- メモリー
- ネットワーク帯域幅
- これらのリソースの組み合わせ
cgroups
の主なユースケースは、システムプロセスを集約し、アプリケーションとユーザー間でハードウェアリソースを分割することです。これにより、環境の効率、安定性、およびセキュリティーを強化できます。
- コントロールグループ 1
コントロールグループバージョン 1 (
cgroups-v1
) はリソースごとのコントローラー階層を提供します。つまり、各リソース (CPU、メモリー、I/O など) には、独自のコントロールグループ階層があります。各リソースの管理で、1 つのコントローラーが別のコントローラーと調整できるように、異なるコントロールグループ階層を組み合わせることができます。ただし、2 つのコントローラーが異なるプロセス階層に属する場合、適切な調整が制限されます。cgroups-v1
コントローラーは、長期間に渡って開発されているため、制御ファイルの動作と命名は均一ではありません。- コントロールグループ 2
Control groups version 2 (
cgroups-v2
) は、すべてのリソースコントローラーがマウントされる単一のコントロールグループ階層を提供します。コントロールファイルの動作と命名は、さまざまなコントローラーにおいて一貫性があります。
注記cgroups-v2
は、RHEL 8.2 以降のバージョンで完全にサポートされています。詳細は Control Group v2 is now fully supported in RHEL 8 を参照してください。
関連情報
- カーネルリソースコントローラーの概要
-
cgroups(7)
の man ページ - コントロールグループ内の systemd のロール