2.4. コントロールグループに関する情報の取得

systemctl コマンドを使用して、システムユニットを一覧表示し、それらのステータスを表示します。さらに、コントロールグループの階層を表示するために systemd-cgls コマンドが提供され、リアルタイムでリソース消費を監視するために systemd-cgtop が提供されています。

2.4.1. ユニットの制限

以下のコマンドを使用して、システム上のすべてのアクティブなユニットを一覧表示します。
systemctl list-units
list-units オプションがデフォルトで実行されます。これは、このオプションを省略し、以下のみを実行する場合と同じ出力が表示されることを意味します。
systemctl
UNIT                     LOAD   ACTIVE SUB     DESCRIPTION
abrt-ccpp.service        loaded active exited  Install ABRT coredump hook
abrt-oops.service        loaded active running ABRT kernel log watcher
abrt-vmcore.service      loaded active exited  Harvest vmcores for ABRT
abrt-xorg.service        loaded active running ABRT Xorg log watcher
...
上記のように表示される出力には 5 つの列が含まれます。
  • UNIT: cgroup ツリー内のユニットの位置も反映するユニットの名前です。「systemd ユニットタイプ」 で言及されているように、スライススコープ および サービス の 3 つのユニットタイプがリソースコントロールと関連しています。systemd のユニットタイプの詳細一覧については、Red Hat Enterprise Linux 7 システム管理者のガイドsystemd によるサービス管理 の章を参照してください。
  • LOAD: ユニット設定がファイルが適切に読み込まれたかどうかを示します。ユニットファイルが読み込みに失敗した場合、フィールドには loaded ではなく error 状態が含まれます。他のユニットの読み込み状態には、stubmerged、および masked があります。
  • ACTIVE: SUB を一般化したユニットの高レベルのアクティブ化の状態です。
  • SUB: ユニットの低レベルのアクティブ化の状態です。使用できる値の範囲はユニットタイプによって異なります。
  • DESCRIPTION: ユニットのコンテンツおよび機能の説明です。
デフォルトで、systemctl はアクティブなユニットのみを一覧表示します (ACTIVE フィールドの高レベルのアクティブ化の状態)。--all オプションを使用して非アクティブなユニットも表示できます。出力一覧の情報量を制限するには、サービス および スライス などのコンマ区切りのユニットタイプの一覧が必要な --type (-t) パラメーター、または loaded および masked などのユニットの読み込み状態を使用します。

例2.7 systemctl list-units の使用

システム上で使用されるすべてのスライスの一覧を表示するには、以下を入力します。
~]$ systemctl -t slice
すべてのアクティブなマスクされたサービスを一覧表示するには、以下を入力します。
~]$ systemctl -t service,masked 
システムにインストールされたすべてのユニットファイルとそれらのステータスを一覧表示するには、以下を入力します。
systemctl list-unit-files

2.4.2. コントロールグループ階層の表示

上記のコマンドはユニットレベルを超えて cgroup 内で実行されている実際のプロセスを表示することはありません。さらに、systemctl の出力はユニットの階層を表示しません。これらはいずれも cgroup に従って実行中のプロセスをグループ化する systemd-cgls コマンドを使用して実行できます。システム上に cgroup 階層全体を表示するには、以下を入力します。
systemd-cgls
systemd-cgls がパラメーターなしに実行されると、cgroup 階層全体が返されます。cgroup ツリーの最も高いレベルはスライスによって形成され、以下のように表示されます。
├─system
│ ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 20  
│ ...
│      
├─user
│ ├─user-1000
│ │ └─ ...
│ ├─user-2000
│ │ └─ ...
│ ...
│     
└─machine  
  ├─machine-1000
  │ └─ ...
  ...
仮想マシンまたはコンテナーを実行中の場合にのみマシンスライスが存在することに注意してください。cgroup ツリーの詳細は、「systemd ユニットタイプ」 を参照してください。
systemd-cgls の出力を減らし、階層の指定された部分を表示するには、以下を実行します。
systemd-cgls name
name を検査するリソースコントローラーの名前に置き換えます。
代替方法として、systemctl status コマンドを使用してシステムユニットについての詳細情報を表示します。cgroup サブツリーはこのコマンドの出力の一部です。
systemctl status name
systemctl status の詳細は、Red Hat Enterprise Linux 7 システム管理者のガイドsystemd によるサービス管理 の章を参照してください。

例2.8 コントロールグループ階層の表示

memory リソースコントローラーの cgroup ツリーを表示するには、以下を実行します。
~]$ systemd-cgls memory
memory:
├─    1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
├─  475 /usr/lib/systemd/systemd-journald
...
上記のコマンドの出力は、選択したコントローラーと対話するサービスを一覧表示します。別の方法として、cgroup ツリーの一部を表示して特定のサービス、スライス、またはスコープユニットを確認することができます。
~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since Sun 2014-03-23 08:01:14 MDT; 33min ago
  Process: 3385 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 1205 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─1205 /usr/sbin/httpd -DFOREGROUND
           ├─3387 /usr/sbin/httpd -DFOREGROUND
           ├─3388 /usr/sbin/httpd -DFOREGROUND
           ├─3389 /usr/sbin/httpd -DFOREGROUND
           ├─3390 /usr/sbin/httpd -DFOREGROUND
           └─3391 /usr/sbin/httpd -DFOREGROUND

...
上記のツールのほかにも、systemd は Linux コンテナーのモニタリングに特化した machinectl コマンドも提供します。

2.4.3. リソースコントローラーの表示

上記の systemctl コマンドは、より高いレベルのユニット階層のモニタリングを可能にしますが、Linux カーネルのどのリソースコントローラーがどのプロセスで実際に使用されているかは表示しません。この情報は専用のプロセスファイルに保存されます。これを表示するには、root として以下を入力します。
cat proc/PID/cgroup
ここで、PID は検査するプロセスの ID を表します。デフォルトで、この一覧は systemd で開始されるすべてのユニットの一覧と同様です。systemd はすべてのデフォルトコントローラーを自動的にマウントするためです。以下の例を参照してください。
~]# cat proc/27/cgroup
10:hugetlb:/
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/
2:cpuset:/
1:name=systemd:/
このファイルを検査することにより、プロセスが systemd ユニットファイルの仕様で定義される必要な cgroup に置かれているかどうかを判別することができます。

2.4.4. リソース消費のモニタリング

systemd-cgls コマンドは cgroup 階層の静的なスナップショットを提供します。リソース使用 (CPU、メモリーおよび IO) 別に順序付けられる現在実行中の cgroup の動的なアカウントを表示するには、以下を使用します。
systemd-cgtop
systemd-cgtop の動作、指定される統計および制御オプションは top ユーティリティーのオプションと同様です。詳細は、systemd-cgtop(1) の man ページを参照してください。