第2章 コントロールグループの使用
以下のセクションでは、コントロールグループの作成と管理に関連するタスクの概要について説明します。このガイドでは、cgroup 管理の方法として推奨されていて、今後サポートされる予定の systemd によって提供されるユーティリティーに焦点を当てています。Red Hat Enterprise Linux の以前のバージョンでは、cgroup の作成と管理に libcgroup パッケージを使用していました。このパッケージは、下位互換性を確保するために引き続き利用できますが (警告)、Red Hat Enterprise Linux の今後のバージョンではサポートされません。
2.1. コントロールグループの作成
systemd の観点からは、cgroup は、ユニットファイルで設定可能で、systemd のコマンドラインユーティリティーで管理可能なシステムユニットにバインドされます。アプリケーションのタイプに応じて、リソース管理設定は transient または persistent を使用できます。
サービスの 一時的な cgroup を作成するには、systemd-run コマンドでサービスを開始します。このようにして、実行時にサービスによって消費されるリソースに制限を設定できます。アプリケーションは、systemd への API 呼び出しを使用して一時的な cgroup を動的に作成できます。API リファレンスについては 「オンラインドキュメント」 を参照してください。一時的なユニットは、サービスが停止するとすぐに自動的に削除されます。
永続的な cgroup をサービスに割り当てるには、そのユニット設定ファイルを編集します。この設定はシステム再起動後も保存されるので、これを使用して自動的に起動されたサービスを管理できます。スコープユニットはこの方法では作成できないことに注意してください。
2.1.1. systemd-run を使用した一時的な Cgroup の作成
systemd-run コマンドは、一時的な service または scope ユニットを作成して起動し、そのユニットでカスタムのコマンドを実行するために使用します。サービスユニットで実行されるコマンドは、バックグラウンドで非同期に開始され、systemd プロセスから呼び出されます。スコープ単位で実行されるコマンドは、systemd-run プロセスから直接開始されるため、呼び出し元の実行環境を継承します。この場合の実行は同期的です。
指定した cgroup でコマンドを実行するには、
root
で、次のように入力します。
~]# systemd-run --unit=name --scope --slice=slice_name command
- name は、ユニットに付ける名前を表します。
--unit
が指定されていない場合、ユニット名は自動的に生成されます。systemctl 出力でユニットを表すため、わかりやすい名前を選択することをお勧めします。名前は、ユニットの実行時に一意である必要があります。 - オプションの
--scope
パラメーターを使用して、デフォルトで作成される サービス ユニットの代わりに一時的な スコープ ユニットを作成します。 --slice
オプションを使用すると、新しく作成した サービス または スコープ ユニットを指定したスライスのメンバーにすることができます。slice_name は、既存のスライスの名前 (systemctl -t slice の出力に表示) に置き換えるか、または一意の名前を指定して新規スライスを作成します。デフォルトでは、サービスおよびスコープは system.slice のメンバーとして作成されます。- command は、サービスユニットで実行するコマンドに置き換えます。このコマンドのパラメーターが systemd-run のパラメーターと混同されないように、このコマンドを systemd-run 構文の最後に配置します。
上記のオプションに加えて、systemd-run で使用できるパラメーターが他にもいくつかあります。たとえば、
--description
はユニットの説明を作成し、--remain-after-exit
はサービスのプロセスを終了した後にランタイム情報を収集できるようにします。--machine
オプションは、限定されたコンテナーでコマンドを実行します。詳細は、systemd-run (1) マニュアルページを参照してください。
例2.1 systemd-run での新規サービスの開始
次のコマンドを使用して、
test
という新しいスライスのサービスユニットで top ユーティリティーを実行します。root
で次のコマンドを入力します。
~]# systemd-run --unit=toptest --slice=test
top -b
サービスが正常に開始されたことを確認する次のメッセージが表示されます。
Running as unit toptest.service
これで、toptest.service という名前を使用して、systemctl コマンドで cgroup を監視または変更できるようになりました。
2.1.2. 永続的な cgroup の作成
システム起動時にユニットが自動的に開始されるように設定するには、systemctl enable コマンドを実行します (Red Hat Enterprise Linux 7 システム管理者ガイド の systemd によるサービスの管理 という章を参照)。このコマンドを実行すると、ユニットファイルが
/usr/lib/systemd/system/
ディレクトリーに自動的に作成されます。cgroup に永続的な変更を加えるには、そのユニットファイルで設定パラメーターを追加または変更します。詳細は、「ユニットファイルの変更」 を参照してください。