Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第2章 コントロールグループの使用

以下のセクションでは、コントロールグループの作成と管理に関連するタスクの概要を説明します。本ガイドでは、systemd が提供するユーティリティーに重点を置いています。これは、cgroup 管理として優先されるため、今後サポートされる予定です。以前のバージョンの Red Hat Enterprise Linux では、cgroups を作成して管理するのに libcgroup パッケージを使用していました。このパッケージは、後方互換性 警告を参照)として引き続き利用できますが、Red Hat Enterprise Linux の今後のバージョンではサポートしていません。

2.1. コントロールグループの作成

systemd の観点では、cgroup はユニットファイルで設定可能なシステムユニットにバインドされ、systemd のコマンドラインユーティリティーで管理できます。アプリケーションのタイプに応じて、リソース管理の設定は一時的なものでも永続 できます
サービスの一時的な cgroup を作成するには、systemd-run コマンドでサービスを起動します。これにより、ランタイム時にサービスが消費するリソースに制限を設定できます。アプリケーションは、systemd への API 呼び出しを使用して、一時的な cgroups を動的に作成できます。API 「オンラインドキュメント」、を参照してください。一時的なユニットは、サービスが停止するとすぐに自動的に削除されます。
永続的な cgroup をサービスに割り当てるには、そのユニット設定ファイルを編集します。この設定はシステム再起動後も保存されるので、これを使用して自動的に起動されたサービスを管理できます。このようにスコープのユニットを作成することができないことに注意してください。

2.1.1. systemd-run でのTransient Cgroups の作成

systemd-run コマンドは、一時的なサービスまたはスコープユニット を作成して起動し、そのユニットでカスタムコマンドを実行します。サービスユニットで実行されるコマンドは、バックグラウンドで非同期に開始され、systemd プロセスから呼び出されます。スコープユニットで実行されるコマンドは、systemd-run プロセスから直接開始されるため、呼び出し元の実行環境を継承します。この場合の実行は同期です。
指定した cgroup でコマンドを実行するには、root で以下を入力します。
~]# systemd-run --unit=name --scope --slice=slice_name command
  • この名前は、ユニットが既知の名前を表します。--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)man ページを参照してください。

例2.1 systemd-run で新規サービスの起動

テストと呼ばれる新しいスライスで、サービスユニットでトップユーティリティーを実行します root で以下を入力します。
~]# systemd-run --unit=toptest --slice=test top -b
以下のメッセージが表示され、サービスが正常に起動したことを確認します。
Running as unit toptest.service
これで、name toptest.service を使用して cgroup を systemctl コマンドで監視または変更できるようになりました。

2.1.2. 永続 Cgroups の作成

システムの起動時にユニットを自動的に起動するように設定するには、systemctl enable コマンドを実行します(『Red Hat Enterprise Linux 7 システム管理者ガイド』の「systemd によるサービスの管理 」の章を参照)。このコマンドを実行すると、/usr/lib/systemd/system/ ディレクトリーにユニットファイルが自動的に作成されます。cgroup を永続的に変更するには、そのユニットファイルに設定パラメーターを追加または変更します。詳細はを参照してください 「ユニットファイルの変更」