Red Hat Training

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

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 になります。ユニットの読み込みの状態は スタブマージマスクされ ます。
  • ACTIVE - ユニットのアクティベーションの状態の概要(SUB を一般化)
  • SUB - ユニットのアクティベーションの状態(詳細レベル)。許容値の範囲は、ユニットタイプによって異なります。
  • DESCRIPTION - ユニットのコンテンツおよび機能の説明。
デフォルトでは、systemctl ではアクティブなユニットのみが一覧表示されます(アクティベーションの状態は ACTIVE フィールドにあります)。--all オプションを使用して、アクティブではないユニットも表示します。出力一覧の情報量を制限するには、サービスや スライスなどのユニットタイプのコンマ区切りの一覧を必要とする --type (-t) パラメーターを使用します。あるいは、読み込まれ 、マスクされたユニット負荷の状態を使用します

例2.8 systemctl list-units の使用

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

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

前述の一覧コマンドは、ユニットレベルを超えるものではなく、cgroups で実行している実際のプロセスを表示します。また、systemctl の出力には、ユニットの階層も表示されません。cgroups に応じて実行中のプロセスをグループ化する 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 name

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

メモリーリソースコントローラーの 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 が起動するすべてのユニットで同じリストが使用されます。以下の例を参照してください。
~]# 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 ユニットファイルの仕様で定義されているように、適切な cgroups にプロセスが置かれているかどうかを判断できます。

2.4.4. リソース消費の監視

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