はじめに
Ubuntu Packagesにhealth-check
というパッケージがあり、これを使ってプロセスのリソース使用状況を監視することができる。
CPUの使用率、メモリ消費、ファイルI/O、ネットワーク接続など、様々な側面からプロセスを調査できるとのことなので試してみる。
環境
WSL2 (Ubuntu 24.04 LTS)
health-check 0.03.12-1
health-checkとは
health-check
はUbuntuのuniverseリポジトリで提供されているプロセス監視ツールである。
プロセスがシステムリソースをどのように使用しているかを詳細に分析することができる。
主な機能
health-check
が監視できる主な項目は以下の通り
- CPU使用率
- カーネルのウェイクアップイベント
- ファイルI/O活動(open、read、write、closeなど)
- システムコールの活動
- poll、selectなどのタイムアウト待ちシステムコールの過剰なポーリング
- メモリ使用状況(ヒープとスタックの成長など)
- ネットワーク接続(不正なインターネット活動の発見)
- ネットワーク使用量(送信/受信)の計測
- fsync, fdatasync, syncfs, syncシステムコールによるデータ同期
- ページフォールトの計測
これらの統計情報をJSON形式のファイルにエクスポートして、後で分析することも可能となっているようだ。
health-checkをインストールする
Ubuntu環境では、以下のコマンドでインストールできる
sudo apt install health-check
ログ
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
crack-common libdouble-conversion3 libgl1-amber-dri libglapi-mesa libllvm17t64 libmd4c0 libpcre2-16-0
libqt5core5t64 libqt5dbus5t64 libqt5gui5t64 libqt5network5t64 libqt5qml5 libqt5qmlmodels5 libqt5quick5
libqt5svg5 libqt5waylandclient5 libqt5waylandcompositor5 libqt5widgets5t64 libqt5x11extras5
libxcb-damage0 libxcb-xinerama0 libxcb-xinput0 mesa-utils-bin qt5-gtk-platformtheme qttranslations5-l10n
qtwayland5 xbitmaps
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
health-check
0 upgraded, 1 newly installed, 0 to remove and 36 not upgraded.
Need to get 48.9 kB of archives.
After this operation, 152 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 health-check amd64 0.03.12-1 [48.9 kB]
Fetched 48.9 kB in 1s (46.2 kB/s)
Selecting previously unselected package health-check.
(Reading database ... 127617 files and directories currently installed.)
Preparing to unpack .../health-check_0.03.12-1_amd64.deb ...
Unpacking health-check (0.03.12-1) ...
Setting up health-check (0.03.12-1) ...
Processing triggers for man-db (2.12.0-4build2) ...
基本的な使い方
コマンドライン引数
health-check
コマンドのオプション
オプション | 説明 |
---|---|
-b | 簡略表示モード |
-c | 全ての子プロセスを追跡 |
-d [秒数] | テストの継続時間(秒単位) |
-f | fork/vfork/cloneシステムコールを追跡 |
-h | ヘルプ情報の表示 |
-p [PID/プロセス名] | 追跡するプロセスIDまたはプロセス名(カンマ区切り) |
-m [回数] | 追跡するシステムコールの最大数(デフォルト:100万) |
-o [ファイル名] | JSON出力ファイル |
-r | IPアドレスの名前解決(時間がかかる場合がある) |
-u [ユーザー] | 指定したユーザーとしてコマンドを実行 |
-v | 詳細な出力 |
-w | ウェイクロックカウントを監視(軽量なfnotify監視) |
-W | ウェイクロック使用状況を監視(システムコール検査のオーバーヘッドあり) |
health-checkを使ってみる
特定のプロセスを監視する
既存のプロセスを名前またはプロセスIDで指定して監視するには
sudo health-check -p docker -c -d 30
この例では、docker
プロセスとそのすべての子プロセスを30秒間監視する。
結果
CPU usage (in terms of 1 CPU):
PID Process USR% SYS% TOTAL% Duration
4572 docker 0.03 1.53 1.57 30.00 (very light load)
4524 docker 0.00 0.30 0.30 30.00 (very light load)
4512 docker 0.00 0.00 0.00 30.00 (idle)
4497 docker 0.00 0.00 0.00 30.00 (idle)
4483 docker 0.00 0.00 0.00 30.00 (idle)
4471 docker 0.00 0.00 0.00 30.00 (idle)
4450 docker 0.00 0.00 0.00 30.00 (idle)
Total 0.03 1.83 1.87 (very light load)
Page Faults:
PID Process Minor/sec Major/sec Total/sec
4572 docker 0.00 0.00 0.00
4524 docker 0.00 0.00 0.00
4512 docker 0.00 0.00 0.00
4497 docker 0.00 0.00 0.00
4483 docker 0.00 0.00 0.00
4471 docker 0.00 0.00 0.00
4450 docker 0.00 0.00 0.00
Context Switches:
PID Process Voluntary Involuntary Total
Ctxt Sw/Sec Ctxt Sw/Sec Ctxt Sw/Sec
4573 docker 911.44 0.00 911.44 (quite high)
4583 docker 218.96 0.00 218.96 (quite high)
4530 docker 166.93 0.00 166.93 (quite high)
4586 docker 83.80 0.00 83.80 (moderate)
4704 docker 52.27 0.00 52.27 (moderate)
4541 docker 19.40 0.00 19.40 (moderate)
5630 docker 1.50 0.00 1.50 (low)
4519 docker 1.37 0.00 1.37 (low)
4508 docker 1.37 0.00 1.37 (low)
4472 docker 1.37 0.00 1.37 (low)
4516 docker 1.30 0.00 1.30 (low)
4716 docker 1.30 0.00 1.30 (low)
4478 docker 1.30 0.00 1.30 (low)
4465 docker 1.17 0.00 1.17 (low)
4489 docker 1.10 0.00 1.10 (low)
4724 docker 1.07 0.00 1.07 (low)
4485 docker 0.77 0.00 0.77 (very low)
4464 docker 0.77 0.00 0.77 (very low)
4500 docker 0.73 0.00 0.73 (very low)
4463 docker 0.73 0.00 0.73 (very low)
4743 docker 0.67 0.00 0.67 (very low)
4722 docker 0.60 0.00 0.60 (very low)
4720 docker 0.60 0.00 0.60 (very low)
4509 docker 0.57 0.00 0.57 (very low)
4715 docker 0.57 0.00 0.57 (very low)
4506 docker 0.43 0.00 0.43 (very low)
4723 docker 0.37 0.00 0.37 (very low)
4518 docker 0.37 0.00 0.37 (very low)
4513 docker 0.33 0.00 0.33 (very low)
4498 docker 0.33 0.00 0.33 (very low)
4484 docker 0.33 0.00 0.33 (very low)
4452 docker 0.33 0.00 0.33 (very low)
4480 docker 0.30 0.00 0.30 (very low)
4714 docker 0.27 0.00 0.27 (very low)
4718 docker 0.23 0.00 0.23 (very low)
4491 docker 0.23 0.00 0.23 (very low)
4740 docker 0.17 0.00 0.17 (very low)
4502 docker 0.17 0.00 0.17 (very low)
4717 docker 0.17 0.00 0.17 (very low)
4515 docker 0.07 0.00 0.07 (very low)
4514 docker 0.07 0.00 0.07 (very low)
4745 docker 0.07 0.00 0.07 (very low)
4721 docker 0.07 0.00 0.07 (very low)
4719 docker 0.07 0.00 0.07 (very low)
4505 docker 0.07 0.00 0.07 (very low)
4503 docker 0.07 0.00 0.07 (very low)
4501 docker 0.07 0.00 0.07 (very low)
4744 docker 0.07 0.00 0.07 (very low)
4492 docker 0.07 0.00 0.07 (very low)
4490 docker 0.07 0.00 0.07 (very low)
4488 docker 0.07 0.00 0.07 (very low)
4487 docker 0.07 0.00 0.07 (very low)
4486 docker 0.07 0.00 0.07 (very low)
4713 docker 0.07 0.00 0.07 (very low)
4712 docker 0.07 0.00 0.07 (very low)
4711 docker 0.07 0.00 0.07 (very low)
4481 docker 0.07 0.00 0.07 (very low)
4479 docker 0.07 0.00 0.07 (very low)
4477 docker 0.07 0.00 0.07 (very low)
4476 docker 0.07 0.00 0.07 (very low)
4475 docker 0.07 0.00 0.07 (very low)
4474 docker 0.07 0.00 0.07 (very low)
4473 docker 0.07 0.00 0.07 (very low)
4466 docker 0.07 0.00 0.07 (very low)
4462 docker 0.07 0.00 0.07 (very low)
4456 docker 0.07 0.00 0.07 (very low)
4455 docker 0.07 0.00 0.07 (very low)
4454 docker 0.07 0.00 0.07 (very low)
4453 docker 0.07 0.00 0.07 (very low)
4572 docker 0.07 0.00 0.07 (very low)
4524 docker 0.07 0.00 0.07 (very low)
4512 docker 0.07 0.00 0.07 (very low)
4497 docker 0.07 0.00 0.07 (very low)
4483 docker 0.07 0.00 0.07 (very low)
4471 docker 0.07 0.00 0.07 (very low)
4450 docker 0.07 0.00 0.07 (very low)
4706 docker 0.00 0.00 0.00 (idle)
4705 docker 0.00 0.00 0.00 (idle)
4585 docker 0.00 0.00 0.00 (idle)
4584 docker 0.00 0.00 0.00 (idle)
4577 docker 0.00 0.00 0.00 (idle)
4576 docker 0.00 0.00 0.00 (idle)
4575 docker 0.00 0.00 0.00 (idle)
4574 docker 0.00 0.00 0.00 (idle)
4755 docker 0.00 0.00 0.00 (idle)
4703 docker 0.00 0.00 0.00 (idle)
4702 docker 0.00 0.00 0.00 (idle)
4544 docker 0.00 0.00 0.00 (idle)
4543 docker 0.00 0.00 0.00 (idle)
4542 docker 0.00 0.00 0.00 (idle)
4534 docker 0.00 0.00 0.00 (idle)
4533 docker 0.00 0.00 0.00 (idle)
4532 docker 0.00 0.00 0.00 (idle)
4531 docker 0.00 0.00 0.00 (idle)
4746 docker 0.00 0.00 0.00 (idle)
4521 docker 0.00 0.00 0.00 (idle)
4520 docker 0.00 0.00 0.00 (idle)
4517 docker 0.00 0.00 0.00 (idle)
Total 1478.12 0.00 1478.12
File I/O operations:
PID Process Count Op Filename
5627 docker 1 C /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker
Op: O=Open, R=Read, W=Write, C=Close
File I/O Operations per second:
PID Process Open Close Read Write
5627 docker 0.00 0.03 0.00 0.00
System calls traced:
PID Process Syscall Count Rate/Sec Total μSecs % Call Time
4450 docker futex 1 0.0333 0 0.0000
4452 docker futex 2 0.0667 102 0.0000
4452 docker restart_syscall 1 0.0333 6278768 1.3111
4452 docker nanosleep 1 0.0333 10847 0.0023
4453 docker futex 1 0.0333 0 0.0000
4454 docker futex 1 0.0333 0 0.0000
4455 docker epoll_pwait 1 0.0333 0 0.0000
4456 docker futex 1 0.0333 0 0.0000
4462 docker futex 1 0.0333 0 0.0000
4463 docker futex 5 0.1667 6279364 1.3112
4463 docker epoll_pwait 1 0.0333 78 0.0000
4463 docker tgkill 1 0.0333 76 0.0000
4463 docker getpid 1 0.0333 53 0.0000
4463 docker rt_sigreturn 1 0.0333 31 0.0000
4463 docker sched_yield 1 0.0333 57 0.0000
4464 docker futex 7 0.2333 6281263 1.3116
4464 docker nanosleep 2 0.0667 299 0.0001
4465 docker futex 10 0.3333 6280683 1.3115
4465 docker sched_yield 2 0.0667 76 0.0000
4465 docker epoll_pwait 1 0.0333 47 0.0000
4465 docker rt_sigreturn 1 0.0333 53 0.0000
4465 docker getpid 1 0.0333 53 0.0000
4465 docker tgkill 1 0.0333 54 0.0000
4466 docker read 1 0.0333 0 0.0000
4471 docker futex 1 0.0333 0 0.0000
4472 docker nanosleep 9 0.3000 1389 0.0003
4472 docker futex 4 0.1333 5939110 1.2402
4472 docker restart_syscall 1 0.0333 9300549 1.9421
4473 docker futex 1 0.0333 0 0.0000
4474 docker futex 1 0.0333 0 0.0000
4475 docker futex 1 0.0333 0 0.0000
4476 docker futex 1 0.0333 0 0.0000
4477 docker futex 1 0.0333 0 0.0000
4478 docker epoll_pwait 7 0.2333 15240218 3.1824
4478 docker read 5 0.1667 242 0.0001
4478 docker write 4 0.1333 274 0.0001
4478 docker futex 2 0.0667 160 0.0000
4479 docker futex 1 0.0333 0 0.0000
4480 docker read 2 0.0667 15238935 3.1822
4480 docker write 1 0.0333 68 0.0000
4480 docker futex 1 0.0333 61 0.0000
4481 docker futex 1 0.0333 0 0.0000
4483 docker futex 1 0.0333 0 0.0000
4484 docker futex 2 0.0667 89 0.0000
4484 docker nanosleep 1 0.0333 10441 0.0022
4484 docker restart_syscall 1 0.0333 6190703 1.2927
4485 docker futex 6 0.2000 6192323 1.2931
4485 docker sched_yield 1 0.0333 31 0.0000
4485 docker rt_sigreturn 1 0.0333 38 0.0000
4485 docker getpid 1 0.0333 119 0.0000
4485 docker tgkill 1 0.0333 83 0.0000
4486 docker read 1 0.0333 0 0.0000
4487 docker futex 1 0.0333 0 0.0000
4488 docker futex 1 0.0333 0 0.0000
4489 docker futex 8 0.2667 6192746 1.2932
4489 docker getpid 2 0.0667 69 0.0000
4489 docker tgkill 2 0.0667 110 0.0000
4489 docker rt_sigreturn 1 0.0333 48 0.0000
4489 docker epoll_pwait 1 0.0333 47 0.0000
4490 docker futex 1 0.0333 0 0.0000
4491 docker futex 3 0.1000 6191600 1.2929
4492 docker epoll_pwait 1 0.0333 0 0.0000
4497 docker futex 1 0.0333 0 0.0000
4498 docker futex 2 0.0667 112 0.0000
4498 docker restart_syscall 1 0.0333 7741765 1.6166
4498 docker nanosleep 1 0.0333 11136 0.0023
4500 docker futex 6 0.2000 7743093 1.6169
4500 docker nanosleep 2 0.0667 403 0.0001
4500 docker rt_sigreturn 1 0.0333 30 0.0000
4501 docker futex 1 0.0333 0 0.0000
4502 docker futex 2 0.0667 7743779 1.6170
4503 docker futex 1 0.0333 0 0.0000
4505 docker read 1 0.0333 0 0.0000
4506 docker futex 4 0.1333 7743210 1.6169
4506 docker rt_sigreturn 1 0.0333 30 0.0000
4508 docker futex 9 0.3000 7742658 1.6168
4508 docker sched_yield 3 0.1000 114 0.0000
4508 docker tgkill 2 0.0667 121 0.0000
4508 docker getpid 2 0.0667 241 0.0001
4508 docker epoll_pwait 2 0.0667 85 0.0000
4508 docker rt_sigreturn 1 0.0333 33 0.0000
4509 docker futex 3 0.1000 7742978 1.6169
4509 docker tgkill 1 0.0333 43 0.0000
4509 docker rt_sigreturn 1 0.0333 43 0.0000
4509 docker nanosleep 1 0.0333 218 0.0000
4509 docker getpid 1 0.0333 43 0.0000
4512 docker futex 1 0.0333 0 0.0000
4513 docker futex 2 0.0667 98 0.0000
4513 docker nanosleep 1 0.0333 10522 0.0022
4513 docker restart_syscall 1 0.0333 7876072 1.6447
4514 docker futex 1 0.0333 0 0.0000
4515 docker epoll_pwait 1 0.0333 0 0.0000
4516 docker futex 8 0.2667 7876963 1.6448
4516 docker getpid 3 0.1000 863 0.0002
4516 docker tgkill 3 0.1000 220 0.0000
4516 docker epoll_pwait 2 0.0667 101 0.0000
4516 docker sched_yield 1 0.0333 51 0.0000
4516 docker rt_sigreturn 1 0.0333 88 0.0000
4517 docker futex 1 0.0333 0 0.0000
4518 docker futex 5 0.1667 7879667 1.6454
4519 docker futex 11 0.3667 7877951 1.6451
4519 docker getpid 2 0.0667 108 0.0000
4519 docker rt_sigreturn 2 0.0667 73 0.0000
4519 docker tgkill 2 0.0667 257 0.0001
4519 docker nanosleep 1 0.0333 126 0.0000
4520 docker read 1 0.0333 0 0.0000
4521 docker futex 1 0.0333 0 0.0000
4524 docker futex 1 0.0333 0 0.0000
4530 docker nanosleep 1563 52.0985 309351 0.0646
4530 docker futex 106 3.5332 28543135 5.9603
4530 docker sched_yield 2 0.0667 94 0.0000
4530 docker restart_syscall 1 0.0333 967159 0.2020
4531 docker futex 1 0.0333 0 0.0000
4532 docker futex 1 0.0333 0 0.0000
4533 docker futex 1 0.0333 0 0.0000
4534 docker futex 1 0.0333 0 0.0000
4541 docker read 93 3.0999 29880911 6.2397
4541 docker write 92 3.0666 6947 0.0015
4541 docker futex 61 2.0333 5011 0.0010
4542 docker futex 1 0.0333 0 0.0000
4543 docker futex 1 0.0333 0 0.0000
4544 docker futex 1 0.0333 0 0.0000
4572 docker futex 1 0.0333 0 0.0000
4573 docker nanosleep 8638 287.9251 1629005 0.3402
4573 docker futex 477 15.8995 27820162 5.8093
4573 docker restart_syscall 1 0.0333 51670 0.0108
4574 docker futex 1 0.0333 0 0.0000
4575 docker futex 1 0.0333 0 0.0000
4576 docker futex 1 0.0333 0 0.0000
4577 docker futex 1 0.0333 0 0.0000
4583 docker epoll_pwait 1545 51.4985 29755811 6.2135
4583 docker read 754 25.1326 40841 0.0085
4583 docker write 377 12.5663 25359 0.0053
4583 docker futex 228 7.5998 15470 0.0032
4583 docker sched_yield 3 0.1000 123 0.0000
4584 docker futex 1 0.0333 0 0.0000
4585 docker futex 1 0.0333 0 0.0000
4586 docker read 406 13.5329 29891241 6.2418
4586 docker write 405 13.4996 26571 0.0055
4586 docker futex 251 8.3664 16961 0.0035
4702 docker futex 1 0.0333 0 0.0000
4703 docker futex 1 0.0333 0 0.0000
4704 docker epoll_pwait 371 12.3663 29853865 6.2340
4704 docker read 186 6.1998 11070 0.0023
4704 docker write 93 3.0999 6716 0.0014
4704 docker futex 43 1.4333 3159 0.0007
4705 docker futex 1 0.0333 0 0.0000
4706 docker futex 1 0.0333 0 0.0000
4711 docker futex 1 0.0333 0 0.0000
4712 docker futex 1 0.0333 0 0.0000
4713 docker futex 1 0.0333 0 0.0000
4714 docker futex 2 0.0667 6280417 1.3115
4714 docker nanosleep 1 0.0333 165 0.0000
4715 docker futex 4 0.1333 6280647 1.3115
4715 docker tgkill 1 0.0333 55 0.0000
4715 docker rt_sigreturn 1 0.0333 35 0.0000
4715 docker getpid 1 0.0333 62 0.0000
4716 docker futex 9 0.3000 6192283 1.2931
4716 docker rt_sigreturn 2 0.0667 70 0.0000
4716 docker tgkill 1 0.0333 39 0.0000
4716 docker nanosleep 1 0.0333 122 0.0000
4716 docker getpid 1 0.0333 38 0.0000
4716 docker sched_yield 1 0.0333 38 0.0000
4716 docker epoll_pwait 1 0.0333 50 0.0000
4717 docker futex 2 0.0667 6192118 1.2930
4718 docker futex 3 0.1000 6192078 1.2930
4719 docker epoll_pwait 1 0.0333 0 0.0000
4720 docker futex 3 0.1000 7742762 1.6168
4720 docker getpid 2 0.0667 87 0.0000
4720 docker tgkill 2 0.0667 87 0.0000
4720 docker rt_sigreturn 1 0.0333 49 0.0000
4721 docker futex 1 0.0333 0 0.0000
4722 docker futex 4 0.1333 7877644 1.6450
4722 docker rt_sigreturn 2 0.0667 157 0.0000
4722 docker getpid 1 0.0333 36 0.0000
4722 docker tgkill 1 0.0333 39 0.0000
4723 docker futex 4 0.1333 7877959 1.6451
4723 docker rt_sigreturn 1 0.0333 37 0.0000
4724 docker futex 8 0.2667 7879050 1.6453
4724 docker getpid 2 0.0667 76 0.0000
4724 docker rt_sigreturn 2 0.0667 82 0.0000
4724 docker tgkill 2 0.0667 75 0.0000
4740 docker futex 2 0.0667 29987705 6.2620
4740 docker epoll_pwait 1 0.0333 45 0.0000
4743 docker futex 4 0.1333 6280659 1.3115
4743 docker rt_sigreturn 1 0.0333 30 0.0000
4743 docker nanosleep 1 0.0333 116 0.0000
4743 docker getpid 1 0.0333 52 0.0000
4743 docker tgkill 1 0.0333 55 0.0000
4744 docker futex 1 0.0333 0 0.0000
4745 docker futex 1 0.0333 0 0.0000
4746 docker futex 1 0.0333 0 0.0000
4755 docker futex 1 0.0333 0 0.0000
5627 docker futex 4 0.1333 4600532 0.9607
5627 docker rt_sigprocmask 2 0.0667 132 0.0000
5628 docker nanosleep 15 0.5000 3287 0.0007
5628 docker futex 3 0.1000 7892 0.0016
5628 docker restart_syscall 1 0.0333 4591781 0.9588
5629 docker futex 1 0.0333 0 0.0000
5630 docker futex 10 0.3333 4601319 0.9608
5630 docker epoll_pwait 5 0.1667 1366 0.0003
5630 docker read 2 0.0667 146 0.0000
5630 docker exit_group 1 0.0333 0 0.0000
5630 docker epoll_ctl 1 0.0333 57 0.0000
5630 docker write 1 0.0333 99 0.0000
5630 docker close 1 0.0333 88 0.0000
5631 docker futex 9 0.3000 6392 0.0013
5631 docker epoll_pwait 8 0.2667 4596265 0.9598
5631 docker read 4 0.1333 200 0.0000
5631 docker write 2 0.0667 148 0.0000
5631 docker nanosleep 1 0.0333 145 0.0000
5632 docker futex 1 0.0333 0 0.0000
5633 docker futex 2 0.0667 4604244 0.9614
5634 docker read 1 0.0333 0 0.0000
5635 docker futex 1 0.0333 0 0.0000
5636 docker futex 1 0.0333 0 0.0000
5637 docker epoll_pwait 6 0.2000 2912 0.0006
5637 docker futex 5 0.1667 4599401 0.9604
5637 docker read 3 0.1000 162 0.0000
5637 docker nanosleep 2 0.0667 281 0.0001
5637 docker write 1 0.0333 71 0.0000
Total 16123 537.4180 478887223
Top polling system calls:
PID Process Syscall Rate/Sec Infinite Zero Minimum Maximum Average
Timeouts Timeouts Timeout Timeout Timeout
4452 docker nanosleep 0.0333 0 0 10.0 msec 10.0 msec 10.0 msec
4455 docker epoll_pwait 0.0333 1 0 0.0 sec 0.0 sec 0.0 sec
4463 docker epoll_pwait 0.0333 0 1 0.0 sec 0.0 sec 0.0 sec
4464 docker nanosleep 0.0667 0 0 3.0 usec 3.0 usec 3.0 usec
4465 docker epoll_pwait 0.0333 0 1 0.0 sec 0.0 sec 0.0 sec
4472 docker nanosleep 0.3000 0 0 20.0 usec 20.0 usec 20.0 usec
4478 docker epoll_pwait 0.2333 4 3 0.0 sec 0.0 sec 0.0 sec
4484 docker nanosleep 0.0333 0 0 10.0 msec 10.0 msec 10.0 msec
4489 docker epoll_pwait 0.0333 0 1 0.0 sec 0.0 sec 0.0 sec
4492 docker epoll_pwait 0.0333 1 0 0.0 sec 0.0 sec 0.0 sec
4498 docker nanosleep 0.0333 0 0 10.0 msec 10.0 msec 10.0 msec
4500 docker nanosleep 0.0667 0 0 3.0 usec 3.0 usec 3.0 usec
4508 docker epoll_pwait 0.0667 0 2 0.0 sec 0.0 sec 0.0 sec
4509 docker nanosleep 0.0333 0 0 3.0 usec 3.0 usec 3.0 usec
4513 docker nanosleep 0.0333 0 0 10.0 msec 10.0 msec 10.0 msec
4515 docker epoll_pwait 0.0333 1 0 0.0 sec 0.0 sec 0.0 sec
4516 docker epoll_pwait 0.0667 0 2 0.0 sec 0.0 sec 0.0 sec
4519 docker nanosleep 0.0333 0 0 3.0 usec 3.0 usec 3.0 usec
4530 docker nanosleep 52.0985 0 0 20.0 usec 2.6 msec 51.3 usec
4573 docker nanosleep 287.9251 0 0 20.0 usec 5.1 msec 52.2 usec
4583 docker epoll_pwait 51.4985 773 772 0.0 sec 0.0 sec 0.0 sec
4704 docker epoll_pwait 12.3663 186 185 0.0 sec 0.0 sec 0.0 sec
4714 docker nanosleep 0.0333 0 0 3.0 usec 3.0 usec 3.0 usec
4716 docker nanosleep 0.0333 0 0 3.0 usec 3.0 usec 3.0 usec
4716 docker epoll_pwait 0.0333 0 1 0.0 sec 0.0 sec 0.0 sec
4719 docker epoll_pwait 0.0333 1 0 0.0 sec 0.0 sec 0.0 sec
4740 docker epoll_pwait 0.0333 0 1 0.0 sec 0.0 sec 0.0 sec
4743 docker nanosleep 0.0333 0 0 3.0 usec 3.0 usec 3.0 usec
5628 docker nanosleep 0.5000 0 0 20.0 usec 20.0 usec 20.0 usec
5630 docker epoll_pwait 0.1667 0 2 0.0 sec 23.9 sec 14.3 sec
5631 docker epoll_pwait 0.2667 0 5 0.0 sec 28.5 sec 9.5 sec
5631 docker nanosleep 0.0333 0 0 3.0 usec 3.0 usec 3.0 usec
5637 docker epoll_pwait 0.2000 0 3 0.0 sec 23.9 sec 12.0 sec
5637 docker nanosleep 0.0667 0 0 3.0 usec 3.0 usec 3.0 usec
Total 406.5218 967 979
Distribution of poll timeout times:
10.0 100.0 1.0 10.0 100.0 1.0 10.0 100.0
up to to to to to to to to or more
Zero 9.9 99.9 999.9 9.9 99.9 999.9 9.9 99.9 Infinite
PID Process Syscall sec usec usec usec msec msec msec sec sec sec Wait
4452 docker nanosleep 0 - - - - 1 - - - - 0
4455 docker epoll_pwait 0 - - - - - - - - - 1
4463 docker epoll_pwait 1 - - - - - - - - - 0
4464 docker nanosleep 0 2 - - - - - - - - 0
4465 docker epoll_pwait 1 - - - - - - - - - 0
4472 docker nanosleep 0 - 9 - - - - - - - 0
4478 docker epoll_pwait 3 - - - - - - - - - 4
4484 docker nanosleep 0 - - - - 1 - - - - 0
4489 docker epoll_pwait 1 - - - - - - - - - 0
4492 docker epoll_pwait 0 - - - - - - - - - 1
4498 docker nanosleep 0 - - - - 1 - - - - 0
4500 docker nanosleep 0 2 - - - - - - - - 0
4508 docker epoll_pwait 2 - - - - - - - - - 0
4509 docker nanosleep 0 1 - - - - - - - - 0
4513 docker nanosleep 0 - - - - 1 - - - - 0
4515 docker epoll_pwait 0 - - - - - - - - - 1
4516 docker epoll_pwait 2 - - - - - - - - - 0
4519 docker nanosleep 0 1 - - - - - - - - 0
4530 docker nanosleep 0 - 1504 39 20 - - - - - 0
4573 docker nanosleep 0 - 8354 193 91 - - - - - 0
4583 docker epoll_pwait 772 - - - - - - - - - 773
4704 docker epoll_pwait 185 - - - - - - - - - 186
4714 docker nanosleep 0 1 - - - - - - - - 0
4716 docker nanosleep 0 1 - - - - - - - - 0
4716 docker epoll_pwait 1 - - - - - - - - - 0
4719 docker epoll_pwait 0 - - - - - - - - - 1
4740 docker epoll_pwait 1 - - - - - - - - - 0
4743 docker nanosleep 0 1 - - - - - - - - 0
5628 docker nanosleep 0 - 15 - - - - - - - 0
5630 docker epoll_pwait 2 - - - - - - - 3 - 0
5631 docker epoll_pwait 5 - - - - - - - 3 - 0
5631 docker nanosleep 0 1 - - - - - - - - 0
5637 docker epoll_pwait 3 - - - - - - - 3 - 0
5637 docker nanosleep 0 2 - - - - - - - - 0
Polling system call analysis:
docker (4463), epoll_pwait:
1 immediate timed out calls with zero timeout (non-blocking peeks)
docker (4465), epoll_pwait:
1 immediate timed out calls with zero timeout (non-blocking peeks)
docker (4478), epoll_pwait:
2 immediate timed out calls with zero timeout (non-blocking peeks)
docker (4489), epoll_pwait:
1 immediate timed out calls with zero timeout (non-blocking peeks)
docker (4500), nanosleep:
1 nanosleep system call errors
docker (4508), epoll_pwait:
2 immediate timed out calls with zero timeout (non-blocking peeks)
1 repeated immediate timed out polled calls with zero timeouts (heavy polling peeks)
docker (4516), epoll_pwait:
2 immediate timed out calls with zero timeout (non-blocking peeks)
1 repeated immediate timed out polled calls with zero timeouts (heavy polling peeks)
docker (4583), epoll_pwait:
765 immediate timed out calls with zero timeout (non-blocking peeks)
docker (4704), epoll_pwait:
185 immediate timed out calls with zero timeout (non-blocking peeks)
docker (4716), epoll_pwait:
1 immediate timed out calls with zero timeout (non-blocking peeks)
docker (5630), epoll_pwait:
2 immediate timed out calls with zero timeout (non-blocking peeks)
docker (5631), epoll_pwait:
5 immediate timed out calls with zero timeout (non-blocking peeks)
1 repeated immediate timed out polled calls with zero timeouts (heavy polling peeks)
docker (5637), epoll_pwait:
3 immediate timed out calls with zero timeout (non-blocking peeks)
1 repeated immediate timed out polled calls with zero timeouts (heavy polling peeks)
Filesystem Syncs:
None.
Inotify watches added:
None.
Memory:
Per Process Memory (K):
PID Process Type Size RSS PSS
4497 docker Stack 136 20 20
4497 docker Heap 1228008 9728 9728
4497 docker Mapped 27372 18724 2829
4483 docker Stack 136 20 20
4483 docker Heap 1227752 9688 9688
4483 docker Mapped 27372 18896 2880
4450 docker Stack 136 16 16
4450 docker Heap 1228264 8012 8012
4450 docker Mapped 27372 18960 2910
4512 docker Stack 136 20 20
4512 docker Heap 1228264 7812 7812
4512 docker Mapped 27372 18960 2893
4572 docker Stack 136 20 20
4572 docker Heap 1227868 7724 7724
4572 docker Mapped 27372 18912 2939
4471 docker Stack 136 24 24
4471 docker Heap 1227752 7520 7520
4471 docker Mapped 27372 18960 2893
4524 docker Stack 136 20 20
4524 docker Heap 1227752 7584 7584
4524 docker Mapped 27372 18848 2875
Change in memory (K/second):
PID Process Type Size RSS PSS
4572 docker Mapped 0.00 0.00 10.80 (growing moderately fast)
4524 docker Mapped 0.00 0.00 10.80 (growing moderately fast)
4512 docker Mapped 0.00 0.00 10.93 (growing moderately fast)
4497 docker Mapped 0.00 0.00 10.93 (growing moderately fast)
4483 docker Mapped 0.00 0.00 10.87 (growing moderately fast)
4471 docker Mapped 0.00 0.00 10.93 (growing moderately fast)
4450 docker Mapped 0.00 0.00 10.73 (growing moderately fast)
Heap Change via brk():
None.
Memory Change via mmap() and munmap():
None.
Open Network Connections:
PID Process Proto Send Receive Address
4450 docker UNIX 0.00 B 0.00 B /run/user/1002/pipewire-0
4450 docker UNIX 0.00 B 0.00 B /tmp/dbus-xLfyChPmct
4450 docker UNIX 0.00 B 0.00 B /run/dbus/system_bus_socket
4450 docker UNIX 0.00 B 0.00 B /tmp/.X11-unix/X0
4471 docker UNIX 0.00 B 0.00 B /run/systemd/journal/stdout
4471 docker UNIX 0.00 B 0.00 B /run/guest-services/docker.proxy.sock
4471 docker UNIX 0.00 B 0.00 B /run/user/1002/pipewire-0
4471 docker UNIX 0.00 B 0.00 B /var/run/docker.sock
4483 docker UNIX 0.00 B 0.00 B /run/systemd/journal/stdout
4483 docker UNIX 0.00 B 0.00 B /var/run/docker.sock
4483 docker UNIX 0.00 B 0.00 B /run/guest-services/docker.proxy.sock
4483 docker UNIX 0.00 B 0.00 B /run/dbus/system_bus_socket
4497 docker UNIX 0.00 B 0.00 B /run/dbus/system_bus_socket
4497 docker UNIX 0.00 B 0.00 B /var/run/docker.sock
4497 docker UNIX 0.00 B 0.00 B /run/systemd/journal/stdout
4497 docker UNIX 0.00 B 0.00 B /run/guest-services/docker.proxy.sock
4512 docker UNIX 0.00 B 0.00 B /run/dbus/system_bus_socket
4512 docker UNIX 0.00 B 0.00 B /run/systemd/journal/stdout
4512 docker UNIX 0.00 B 0.00 B /run/guest-services/docker.proxy.sock
4524 docker UNIX 0.00 B 0.00 B /run/host-services/backend.sock
4524 docker UNIX 0.00 B 0.00 B /run/user/1002/bus
4524 docker UNIX 0.00 B 0.00 B /var/run/docker.sock
4572 docker UNIX 0.00 B 0.00 B /run/guest-services/docker.proxy.sock
4572 docker UNIX 0.00 B 0.00 B /var/run/docker.sock
4572 docker UNIX 0.00 B 0.00 B /run/systemd/journal/stdout
5627 docker UNIX 0.00 B 0.00 B /run/dbus/system_bus_socket
5627 docker UNIX 0.00 B 0.00 B /run/systemd/journal/stdout
5627 docker UNIX 0.00 B 0.00 B /var/run/docker.sock
Total 0.00 B 0.00 B
コマンドを実行して監視する
特定のコマンドを実行し、その実行中の動作を監視する
sudo health-check /bin/dd if=/dev/zero of=test-dd bs=1M count=100
この例では、dd
コマンドを実行し、そのプロセスの動作を監視する。
結果
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.105105 s, 998 MB/s
CPU usage (in terms of 1 CPU):
PID Process USR% SYS% TOTAL% Duration
6934 dd 0.00 67.76 67.76 0.12 (high load)
Page Faults:
PID Process Minor/sec Major/sec Total/sec
6934 dd 2871.30 0.00 2871.30
Context Switches:
PID Process Voluntary Involuntary Total
Ctxt Sw/Sec Ctxt Sw/Sec Ctxt Sw/Sec
6934 dd 5480.03 0.00 5480.03 (high)
File I/O operations:
PID Process Count Op Filename
6934 dd 100 W /home/kbushi/test-dd
6934 dd 3 R /usr/lib/x86_64-linux-gnu/libc.so.6
6934 dd 1 C /usr/lib/locale/C.utf8/LC_CTYPE
6934 dd 1 C /usr/lib/locale/C.utf8/LC_NUMERIC
6934 dd 1 C /usr/lib/locale/C.utf8/LC_TIME
6934 dd 1 C /usr/lib/x86_64-linux-gnu/libc.so.6
6934 dd 1 C /usr/lib/locale/C.utf8/LC_COLLATE
6934 dd 1 C /usr/lib/locale/C.utf8/LC_MONETARY
6934 dd 1 C /usr/lib/locale/C.utf8/LC_MESSAGES/SYS_LC_MESSAGES
6934 dd 1 C /usr/lib/locale/C.utf8/LC_PAPER
6934 dd 1 C /usr/lib/locale/C.utf8/LC_NAME
6934 dd 1 C /usr/lib/locale/C.utf8/LC_ADDRESS
6934 dd 1 C /usr/lib/locale/C.utf8/LC_TELEPHONE
6934 dd 1 C /usr/lib/locale/C.utf8/LC_MEASUREMENT
6934 dd 1 C /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
6934 dd 1 C /usr/lib/locale/C.utf8/LC_IDENTIFICATION
6934 dd 1 C /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
6934 dd 1 C /usr/bin/dd
6934 dd 1 CW /home/kbushi/test-dd
6934 dd 1 O /home/kbushi/test-dd
6934 dd 1 O /usr/lib/locale/C.utf8/LC_CTYPE
6934 dd 1 O /usr/lib/locale/C.utf8/LC_NUMERIC
6934 dd 1 O /usr/lib/locale/C.utf8/LC_TIME
6934 dd 1 O /usr/lib/locale/C.utf8/LC_COLLATE
6934 dd 1 O /usr/lib/locale/C.utf8/LC_MONETARY
6934 dd 1 O /usr/lib/locale/C.utf8/LC_MESSAGES/SYS_LC_MESSAGES
6934 dd 1 C /usr/lib/locale/C.utf8/LC_MESSAGES
6934 dd 1 O /usr/lib/locale/C.utf8/LC_MESSAGES
6934 dd 1 O /usr/lib/locale/C.utf8/LC_PAPER
6934 dd 1 O /usr/lib/locale/C.utf8/LC_NAME
6934 dd 1 O /usr/lib/locale/C.utf8/LC_ADDRESS
6934 dd 1 O /usr/lib/locale/C.utf8/LC_TELEPHONE
6934 dd 1 O /usr/lib/locale/C.utf8/LC_MEASUREMENT
6934 dd 1 O /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
6934 dd 1 O /usr/lib/locale/C.utf8/LC_IDENTIFICATION
6934 dd 1 C /etc/locale.alias
6934 dd 1 R /etc/locale.alias
6934 dd 1 O /etc/locale.alias
6934 dd 1 C /etc/ld.so.cache
6934 dd 1 O /usr/lib/x86_64-linux-gnu/libc.so.6
6934 dd 1 O /etc/ld.so.cache
6934 dd 1 R /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
6934 dd 1 O /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
6934 dd 1 OR /usr/bin/dd
Total 145
Op: O=Open, R=Read, W=Write, C=Close
File I/O Operations per second:
PID Process Open Close Read Write
6934 dd 169.40 169.40 50.82 855.46
System calls traced:
PID Process Syscall Count Rate/Sec Total μSecs % Call Time
6934 dd write 103 872.4008 84766 84.2203
6934 dd read 103 872.4008 10157 10.0916
6934 dd openat 32 271.0371 1774 1.7626
6934 dd mmap 22 186.3380 988 0.9816
6934 dd close 22 186.3380 1044 1.0373
6934 dd fstat 17 143.9885 774 0.7690
6934 dd mprotect 3 25.4097 137 0.1361
6934 dd rt_sigaction 3 25.4097 125 0.1242
6934 dd brk 3 25.4097 130 0.1292
6934 dd pread64 2 16.9398 115 0.1143
6934 dd dup2 2 16.9398 86 0.0854
6934 dd set_robust_list 1 8.4699 43 0.0427
6934 dd prlimit64 1 8.4699 43 0.0427
6934 dd access 1 8.4699 45 0.0447
6934 dd lseek 1 8.4699 42 0.0417
6934 dd munmap 1 8.4699 63 0.0626
6934 dd execve 1 8.4699 190 0.1888
6934 dd set_tid_address 1 8.4699 42 0.0417
6934 dd futex 1 8.4699 42 0.0417
6934 dd exit_group 1 8.4699 0 0.0000
6934 dd arch_prctl 1 8.4699 42 0.0417
Total 322 2727.3112 100648
Filesystem Syncs:
None.
Inotify watches added:
None.
Memory:
Per Process Memory (K):
PID Process Type Size RSS PSS
6934 dd Stack 132 12 12
6934 dd Heap 1236 1080 1080
6934 dd Mapped 2828 1992 150
Change in memory (K/second):
PID Process Type Size RSS PSS
6934 dd Stack 0.00 -101.64 -67.76 (shrinking moderately fast)
6934 dd Heap 7589.04 8063.35 8351.33 (growing very fast)
6934 dd Mapped 2473.21 13551.86 575.95 (growing very fast)
Heap Change via brk():
PID brk Count Change (K) Rate (K/Sec)
6934 dd 1 0 0.00 (no change)
Memory Change via mmap() and munmap():
PID mmaps munmaps Change (K) Rate (K/Sec)
6934 dd 22 1 5514 46709.35 (growing very fast)
Open Network Connections:
None.
Analysis ran for just 0.1181 seconds, so rate calculations may be misleading
結果をJSONファイルに出力する
監視結果をJSON形式で保存して後で分析するには:
sudo health-check -p docker -c -d 10 -o docker-health.json
出力結果について
health-check
の出力は、以下のようなセクションに分かれている
CPU使用率
プロセスごとのユーザー空間とシステム空間のCPU使用率が表示される。
高い負荷が検出されると「high load」などの評価が付く。
ウェイクアップ
カーネルのウェイクアップイベントが表示され、頻度に応じて「high」「moderate」「low」などの評価が付く。
コンテキストスイッチ
自発的および非自発的なコンテキストスイッチの回数が表示される。
高頻度のコンテキストスイッチは、プロセスがCPU時間を効率的に使用できていないことを示す。
ファイルI/O操作
ファイルの開く(O)、閉じる(C)、読み取り(R)、書き込み(W)などの操作が記録される。
ディスクI/Oのボトルネックを特定できる。
システムコール
プロセスが呼び出したシステムコールの種類と頻度が表示される。
ポーリングシステムコール
poll、select、epoll_waitなどのタイムアウト待ちシステムコールが分析される。
ゼロタイムアウトでの頻繁なポーリングは非効率的なリソース使用を示す。
メモリ使用状況
スタック、ヒープ、マップされたメモリの使用量と、時間あたりの変化率が表示される。
ネットワーク接続
開かれているネットワーク接続の一覧が表示される。
実際の使用例
例1:高負荷プロセスの分析
サーバーのCPU使用率が突然高くなった場合、top
コマンドでCPU使用率の高いプロセスを見つけた後、そのプロセスをhealth-check
で詳細に分析できる:
sudo health-check -p [high-cpu-process-id] -c -d 300
これにより、プロセスが実際に何をしているのか、どのシステムコールが多く呼び出されているのかがわかる。
例2:メモリリークの調査
メモリ使用量が時間とともに増加しているプロセスがある場合
sudo health-check -p [leaking-process] -c -d 600 -o memory-leak-analysis.json
長時間の監視とJSON出力を組み合わせることで、メモリリークの詳細なパターンを分析できる。
例3:バッテリー消費の調査
ノートPCでバッテリーの消費が早い場合、ウェイクアップの多いプロセスを特定できる:
sudo health-check -p $(pgrep -d, -u $USER) -w -d 60
このコマンドは、現在のユーザーのすべてのプロセスを監視し、ウェイクアップの多いプロセスを特定する。
参考
Ubuntuパッケージ:health-check
https://packages.ubuntu.com/noble/admin/health-checkColinIanKing/health-check | GitHub https://github.com/ColinIanKing/health-check
Ubuntu Wiki: SystemMonitoring
https://wiki.ubuntu.com/SystemMonitoring
おわりに
health-check
というパッケージを使ってみた。
結構いろいろな調査に使えそうで便利なので覚えておこう…。