コンテナは、Linuxにサービスをデプロイするために一般的に使用される方法になり、セキュリティの分離、アプリケーションの起動時間、リソース制御、およびデプロイメントの容易さを提供しています。
コンテナを使用すると、次の図のように、1つのオペレーティングシステムで複数のインスタンスを実行できます。
ここでは、コンテナを動作させるためのコマンドなどは割愛し、代わりにコンテナを分析するための関連ツールを紹介していきます。
関連ツール
ホスト側から実行する関連ツールを例を交えて、紹介していきます。
systemd-cgtop
このコマンドで、現在実行中のcgroupsのCPU、メモリー、および IOの情報を確認できます。
# systemd-cgtop
Control Group Tasks %CPU Memory Input/s Output/s
/ 788 44.5 1.6G - -
/machine.slice 14 2.5 398.4M - -
/machine.slice/libpod-fd3…96cf086645b2acadcbda32ede4f12ade15c0f63e8a4f.scope 12 2.5 397.5M - -
/init.scope 1 0.0 13.9M - -
/machine.slice/libpod-con…96cf086645b2acadcbda32ede4f12ade15c0f63e8a4f.scope 2 - 1.0M - -
/system.slice 115 - 199.6M - -
/system.slice/ModemManager.service 3 - 2.8M - -
/system.slice/NetworkManager.service 3 - 4.2M - -
/system.slice/accounts-daemon.service 3 - 1.6M - -
/system.slice/alsa-state.service 1 - 560.0K - -
/system.slice/atd.service 1 - 488.0K - -
/system.slice/auditd.service 4 - 2.5M - -
/system.slice/avahi-daemon.service 2 - 1.6M - -
/system.slice/bolt.service 3 - 1.3M - -
/system.slice/boot.mount - - 56.0K - -
/system.slice/cockpit.sock
上記の例ですと、”/machine.slice/libpod-fd3…f63e8a4f.scope”が合計CPUの2.5%を使用し、397.5MByteのメモリを使用し、12のタスクを実行していることがわかります。
docker stats
dockerのサブコマンドのstatsを利用すると、統計情報を取得できます。RHEL8では、podman-docker パッケージをインストールすることによって、docker コマンドを実行するたびに、podmanコマンドを実行することができます。
# docker stats
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS
fd37d860e3ab condescending_mendeleev 0.00% 171.2MB / 1.905GB 8.99% 14.59MB / 298.9MB 2.198GB / 806.2MB 11
上記の例ですと、UUID fd37d860e3abのコンテナが、CPUの0%を使っていて、上限1.9GBのメモリのうち171MBを消費していることがわかります。
systemd-cgls
systemd-cgls がパラメーターなしで発行されると、cgroup 階層全体を返します。
# systemd-cgls
Control group /:
-.slice
├─user.slice
│ ├─user-0.slice
│ │ ├─session-4.scope
│ │ │ ├─ 2077 sshd: root [priv]
│ │ │ ├─ 2846 sshd: root@pts/1
│ │ │ ├─ 2847 -bash
│ │ │ ├─46991 systemd-cgls
│ │ │ └─46992 less
│ │ └─user@0.service
│ │ ├─pulseaudio.service
│ │ │ └─2844 /usr/bin/pulseaudio --daemonize=no
│ │ ├─init.scope
│ │ │ ├─2823 /usr/lib/systemd/systemd --user
│ │ │ └─2827 (sd-pam)
/sys/fs/cgroup
cgroupの統計情報を直接確認することで、より詳しい情報を取得できます。例えば、cpuacct.usageでは、この cgroup 内の全タスク (下位階層のタスクを含む) により消費される総 CPU 時間 (ナノ秒単位) をレポートします。
# pwd
/sys/fs/cgroup/cpu,cpuacct
# cat cpuacct.usage
933640419486
CPU スロットルを使用して、タスクのプロセッサー使用量を管理しています。この情報を取得するには、cpu.statを確認します。
# cat cpu.stat
nr_periods 502
nr_throttled 30
throttled_time 3232323
上記の例では、経過済みの期間間隔の数(nr_periods)が502のうち30回cgroup 内のタスクがスロットリングされたことを意味します。throttled_timeは、 cgroup 内のタスクがスロットリングされた合計時間 (ナノ秒単位)を表します。
コメント