Linux コンテナと関連ツール

コンテナは、Linuxにサービスをデプロイするために一般的に使用される方法になり、セキュリティの分離、アプリケーションの起動時間、リソース制御、およびデプロイメントの容易さを提供しています。

コンテナを使用すると、次の図のように、1つのオペレーティングシステムで複数のインスタンスを実行できます。

source: BPF prformance tools

ここでは、コンテナを動作させるためのコマンドなどは割愛し、代わりにコンテナを分析するための関連ツールを紹介していきます。

関連ツール

ホスト側から実行する関連ツールを例を交えて、紹介していきます。

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 内のタスクがスロットリングされた合計時間 (ナノ秒単位)を表します。

コメント

タイトルとURLをコピーしました