Linux VM のパフォーマンス メトリックを収集する
適用対象: ✔️ Linux VM
この記事では、Sysstat ユーティリティ (パフォーマンス監視ツール) を使用して、Microsoft Azure の Linux 仮想マシン (VM) からパフォーマンス メトリックを取得する方法について説明します。 これらのユーティリティを使用して出力を読み取る方法の例を示します。
Linux でパフォーマンス カウンターを収集するために、いくつかのコマンドを使用できます。 vmstat
やuptime
などのコマンドは、CPU 使用率、システム メモリ、システム負荷などの重要なシステム メトリックを提供します。 これらのコマンドのほとんどは既定でプレインストールされますが、他のコマンドは既定のリポジトリから簡単にアクセスできます。
メトリックの種類に基づいて、次のコマンドに分類できます。
Linux 用 Sysstat ユーティリティをインストールする
Azure CLI を使用して、Bash コマンドまたは Run コマンド機能 を使用して、Linux VM に Sysstat ユーティリティをインストールできます。 この記事で提供されている Azure CLI コマンドを使用する場合は、次の 2 つの環境変数が設定されていることを確認してください。 リソース グループ名と VM 名を実際の値に置き換える必要があります。
export MY_RESOURCE_GROUP_NAME="yourResourceGroup"
export MY_VM_NAME="yourVM"
Note
次のコマンドの一部には、ルート特権が必要です。
sysstat
パッケージを Linux VM にインストールするには、次のコマンドを使用します。
Ubuntu:
Red Hat:
SUSE:
CPU
mpstat
mpstat
コマンドは、sysstat
パッケージの一部です。 CPU 使用率と各 CPU の平均が表示されます。これは、CPU 使用率を特定するのに役立ちます。 mpstat
コマンドは、使用可能な CPU の CPU 使用率の概要を示し、使用量のバランスと、単一の CPU が過負荷になっているかどうかを識別するのに役立ちます。
mpstat
を実行する方法の例を次に示します。
-P
: 統計を表示するプロセッサを示し、ALL
引数は、システム内のすべてのオンライン CPU の統計を表示する必要があることを示します。1
: 最初の数値引数は、mpstat
が更新して新しい統計を表示する間隔 (秒単位) を指定します。2
: 2 番目の数値引数は、統計を表示mpstat
回数を指定します。 この場合、1 秒間隔で 2 つの統計情報が出力されます。
長いデータ収集時間に対応するために、引数の回数を増やすことができます。 一般に、3 秒または 5 秒で十分です。 コア数が多いシステムでは、2 秒に減らすことで、表示されるデータの量を管理できます。
mpstat 出力を読み取る方法
mpstat
の出力例を次に示します。
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
16:55:50 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
16:55:51 all 69.09 0.00 30.16 0.00 0.38 0.38 0.00 0.00 0.00 0.00
16:55:51 0 77.23 0.00 21.78 0.00 0.99 0.00 0.00 0.00 0.00 0.00
16:55:51 1 97.03 0.00 0.99 0.00 0.99 0.99 0.00 0.00 0.00 0.00
16:55:51 2 11.11 0.00 88.89 0.00 0.00 0.00 0.00 0.00 0.00 0.00
16:55:51 3 11.00 0.00 88.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00
16:55:51 4 83.84 0.00 16.16 0.00 0.00 0.00 0.00 0.00 0.00 0.00
16:55:51 5 76.00 0.00 23.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00
16:55:51 6 96.00 0.00 3.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00
16:55:51 7 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
[...]
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 74.02 0.00 25.52 0.00 0.25 0.21 0.00 0.00 0.00 0.00
Average: 0 63.00 0.00 36.67 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Average: 1 97.33 0.00 1.67 0.00 0.33 0.67 0.00 0.00 0.00 0.00
Average: 2 42.33 0.00 57.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Average: 3 34.33 0.00 65.00 0.00 0.33 0.33 0.00 0.00 0.00 0.00
Average: 4 88.63 0.00 11.04 0.00 0.00 0.33 0.00 0.00 0.00 0.00
Average: 5 71.33 0.00 28.33 0.00 0.33 0.00 0.00 0.00 0.00 0.00
Average: 6 95.65 0.00 4.01 0.00 0.00 0.33 0.00 0.00 0.00 0.00
Average: 7 99.67 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0.00
注意すべき重要な点がいくつかあります。 最初の行は有用な情報を提供します。
- カーネルとリリース:
5.14.0-362.8.1.el9_3.x86_64
- ホスト名:
alma9
- 日付:
02/21/24
- 建築:
_x86_64_
- CPU の合計数 (この情報は、他のコマンドの出力を解釈するのに役立ちます)。
(8 CPU)
その後、CPU のメトリックが表示されます。 各列の説明を次に示します。
Time
: サンプルが収集された日時を示すタイムスタンプ。CPU
: CPU の数値識別子。all
識別子は、すべての CPU の平均を表します。%usr
: ユーザー空間プロセス (通常はユーザー アプリケーション) ごとの CPU 使用率の割合。%nice
: ユーザー空間プロセス別の CPU 使用率のうち、値が良好 (優先度) である割合。%sys
: カーネル 空間プロセスごとの CPU 使用率の割合。%iowait
: 未処理の I/O 操作を待機している CPU アイドル時間の割合。%irq
: ハードウェア割り込みの処理に費やされた CPU 時間の割合。%soft
: ソフトウェア割り込みの処理に費やされた CPU 時間の割合。%steal
: VM が他の VM にサービスを提供するために費やした CPU 時間の割合 (CPU オーバープロビジョニングがないため、Azure には適用されません)。%guest
: 仮想 CPU が VM の提供に費やした CPU 時間の割合 (Azure には適用されません。VM を実行しているベア メタル システムにのみ関連します)。%gnice
: VM の提供に費やされた値が適切な仮想 CPU の CPU 時間の割合 (Azure には適用されません。VM を実行しているベア メタル システムにのみ関連します)。%idle
: アイドル状態であり、I/O 要求を待機していない CPU 時間の割合。
重要な考慮事項
mpstat
の出力を確認するときの主な考慮事項:
- すべての CPU が正しく読み込まれ、1 つの CPU ですべての負荷が処理されないことを確認します。 この情報は、シングル スレッド アプリケーションを示している可能性があります。
%usr
と%sys
の間の正常なバランスを探します。逆の場合は、カーネル プロセスにサービスを提供するよりも実際のワークロードに費やされた時間が長くなります。- 高い値は、I/O 要求を常に待機しているシステムを示している可能性があります。
%iowait
の割合を探します。 %soft
使用率が高い場合は、ネットワーク トラフィックが多い可能性があります。
vmstat
vmstat
ユーティリティは、ほとんどの Linux ディストリビューションで広く使用できます。 1 つのウィンドウで、CPU、メモリ、ディスク I/O 使用率の概要を説明します。
vmstat
を実行する方法の例を次に示します。
-w
: 幅の広い印刷を使用して、一貫性のある列を維持します。1
: 最初の数値引数は、各レポート間の間隔を秒単位で指定します。 この場合、vmstat は 1 秒ごとにレポートを出力します。5
: 2 番目の数値引数は、vmstat が生成する必要があるレポートの数を指定します。 ここで5
指定すると、vmstat によって合計 5 つのレポートが生成されます。
vmstat の出力を読み取る方法
vmstat
の出力例を次に示します。
--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
14 0 0 26059408 164 137468 0 0 89 3228 56 122 3 1 95 1 0
14 1 0 24388660 164 145468 0 0 0 7811 3264 13870 76 24 0 0 0
18 1 0 23060116 164 155272 0 0 44 8075 3704 15129 78 22 0 0 0
18 1 0 21078640 164 165108 0 0 295 8837 3742 15529 73 27 0 0 0
15 2 0 19015276 164 175960 0 0 9 8561 3639 15177 73 27 0 0 0
出力は、次の 6 つのグループに分類されます。 出力には、システム全体の全体的な統計情報 (つまり、集計されたすべての CPU とブロック デバイス) が表示されます。
procs
: プロセスの統計。memory
: システム メモリの統計。swap
: スワップの統計。io
: ディスク I/O の統計。system
: コンテキスト スイッチと割り込みの統計。cpu
: CPU 使用率の統計。
procs
procs セクションには、次の 2 つの列があります。
r
: 実行キュー内の実行可能なプロセスの数。b
: I/O の待機中にブロックされたプロセスの数。
このセクションでは、システムにボトルネックがあるかどうかをすぐに示します。 どちらの列も大きい数値は、プロセスがキューに入り、リソースを待機することを示します。
r
列は、CPU 時間の実行を待機しているプロセスの数を示します。 この数を解釈する簡単な方法は次のとおりです。 r
キュー内のプロセスの数が CPU の合計数より多い場合は、システムの CPU が負荷が高すぎて、実行を待機しているすべてのプロセスに CPU 時間を割り当てられません。
b
列は、I/O 要求による実行とブロックを待機しているプロセスの数を示します。 この列の数値が大きいと、I/O が高いシステムが発生しており、他のプロセスが I/O 要求の完了を待機しているためにプロセスを実行できないことを示します。 これは、ディスクの待ち時間が長いことも示している可能性があります。
memory
memory セクションには 4 つの列があります。 値はバイト単位で表示されます。 このセクションでは、メモリ使用量の概要について説明します。
swpd
: 使用されたスワップ メモリの量。free
: 空きメモリの量。buff
: バッファーに使用されるメモリの量。cache
: キャッシュに使用されるメモリの量。
スワップ
swap セクションには、次の 2 つの列があります。
si
: 1 秒あたりにスワップされた (システム メモリからスワップに移動された) メモリの量。so
: 1 秒あたりにスワップアウトされたメモリの量 (スワップからシステム メモリに移動)。
高い si
が見られる場合は、システム メモリが不足し、ページをスワップ (スワップ) に移動しているシステムを表している可能性があります。
イオ
io セクションには 2 つの列があります。 これらの値は、1 秒あたりのブロック単位です。
bi
: 1 秒あたりにブロック デバイスから受信したブロックの数 (1 秒あたりのブロックの読み取り)。bo
: 1 秒あたりにブロック デバイスに送信されるブロックの数 (1 秒あたりの書き込み)。
system
system セクションには、次の 2 つの列があります。
in
: 1 秒あたりの割り込みの数。cs
: 1 秒あたりのコンテキスト スイッチの数。
1 秒あたりの割り込みの数が多い場合は、ハードウェア デバイス (ネットワーク操作など) でビジー状態のシステムを示している可能性があります。
コンテキスト スイッチの数が多い場合は、実行時間の短いプロセスが多数あるビジー状態のシステムを示している可能性があります。 ここには良い数値も悪い数値もありません。
cpu
cpu
セクションには、次の 5 つの列があります。
us
: ユーザー領域の使用率。sy
: システム (カーネル領域) の使用率。id
: CPU アイドル時間の使用率。wa
: I/O を使用するプロセスを待機している CPU アイドル時間の使用率。st
: 他の仮想 CPU の提供に費やされた CPU 時間の使用率 (Azure には適用されません)。
値はパーセンテージで表示されます。 これらの値は、 mpstat
ユーティリティによって提示される値と同じであり、CPU 使用率の概要を提供するのに役立ちます。 これらの値を確認するときは、 mpstat のようなプロセスに従います。
アップタイム
uptime
ユーティリティは、システム負荷と負荷平均値の概要を提供します。
アップタイム出力を読み取る方法
uptime
の出力例を次に示します。
16:55:53 up 9 min, 2 users, load average: 9.26, 2.91, 1.18
load average
には 3 つの数値が表示されます。 これらの数値は、 1
、 5
、および 15
分間隔でのシステム負荷に対応します。
これらの値を解釈するには、システムで使用可能な CPU の数を把握することが重要です。これは、前の mpstat
出力から取得されます。 値は CPU の合計数によって異なるため、例として mpstat
出力を使用すると、システムには 8 個の CPU があり、 8
の負荷平均は、すべてのコアが 100% で読み込まれることを意味します。
4
の値は、CPU の半分が 100% (またはすべての CPU の場合は合計負荷 50%) で読み込まれることを意味します。 前の出力では、負荷平均は 9.26
です。つまり、CPU は約 115% で読み込まれます。
1m
、5m
、および15m
間隔は、時間の経過と同時に負荷が増加または減少しているかどうかを識別するのに役立ちます。
さらに、 nproc
コマンドを使用して CPU の数を取得できます。
[メモリ]
メモリの場合、2 つのコマンドでメモリ使用量の詳細を取得できます。
制限なし
free
コマンドは、システム メモリ使用率を示します。
free
を実行する方法の例を次に示します。
-h
: このオプションは、人間が判読できる出力形式を指定します。 メモリ サイズをバイトから読みやすい形式 (キロバイト、メガバイト、ギガバイト) に変換し、適切な単位ラベル (KB、MB、GB) を追加します。
無料の出力を読み取る方法
free
の出力例を次に示します。
total used free shared buff/cache available
Mem: 31Gi 19Gi 12Gi 23Mi 87Mi 11Gi
Swap: 23Gi 0B 23Gi
出力から、 total
システム メモリと available
メモリ、および used
と total
スワップを確認します。 使用可能なメモリは、キャッシュに割り当てられたメモリを考慮し、ユーザー アプリケーションに返すことができます。 最近のカーネルではスワップの使用が普通ですが、使用頻度の低いメモリ ページの中にはスワップに移動できるものもあります。
swapon
swapon
コマンドは、スワップが構成されている場所と、スワップ デバイスまたはファイルのそれぞれの優先順位を表示します。
swapon
を実行する方法の例を次に示します。
swapon
の出力例を次に示します。
Filename Type Size Used Priority
/dev/zram0 partition 16G 0B 100
/mnt/swapfile file 8G 0B -2
この情報は、スワップが非対応の場所 (データや OS ディスクなど) で構成されているかどうかを確認するために重要です。 Azure の参照フレームでは、最適なパフォーマンスを提供するエフェメラル ドライブでスワップを構成する必要があります。
重要な考慮事項
- メモリは有限のリソースであることを思い出してください。 システム メモリ (RAM) とスワップの両方が使い果たされると、メモリ不足キラー (OOM キラー) によってプロセスが強制終了されます。
- スワップがデータ ディスクまたは OS ディスクで構成されていないことを確認します。これにより、待機時間の違いにより I/O に問題が発生する可能性があるためです。 スワップはエフェメラル ドライブで構成する必要があります。
- また、
free -h
出力では空き値が 0 に近い値が表示されるのが一般的であることにも注意してください。 この動作は、ページ キャッシュが原因です。カーネルは必要に応じてそれらのページを解放します。
I/O
ディスク I/O は、ディスクの待機時間が 100ms+
に達する可能性があり、調整されたときに Azure で最も影響を受ける領域の 1 つです。 次のコマンドは、これらのシナリオを特定するのに役立ちます。
iostat
iostat
ユーティリティは、sysstat
パッケージの一部です。 各ブロック デバイスの使用状況の統計情報が表示され、ブロック関連のパフォーマンスの問題を特定するのに役立ちます。 スループット、待機時間、キュー サイズなどのメトリックの詳細が提供されます。 これらのメトリックは、ディスク I/O が制限要因になるかどうかを理解するのに役立ちます。
iostat
を実行する方法の例を次に示します。
-d
: 各デバイスの使用状況レポート。-x
: 拡張統計。-t
: 各レポートのタイムスタンプを表示します。-m
: MB/秒で表示されます。1
: 最初の数値引数は、表示を更新する頻度を秒単位で示します。2
: 2 番目の数値引数は、データが更新された回数を示します。
iostat 出力を読み取る方法
iostat
の出力例を次に示します。
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
02/21/24 16:55:50
Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
sda 1.07 0.02 0.00 0.00 1.95 20.40 23.25 24.55 3.30 12.42 113.75 1081.06 0.26 537.75 0.26 49.83 0.03 2083250.04 0.00 0.00 2.65 2.42
sdb 16.99 0.67 0.36 2.05 2.00 40.47 65.26 0.44 1.55 2.32 1.32 6.92 0.00 0.00 0.00 0.00 0.00 0.00 30.56 1.30 0.16 7.16
zram0 0.51 0.00 0.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
出力には、重要ではない列がいくつか含まれています ( -x
オプションが原因で追加の列)。 重要なものの一部を次に示します。
r/s
: 1 秒あたりの読み取り操作数 (IOPS)。rMB/s
: 1 秒あたりの読み取りメガバイト数。r_await
: 読み取り待機時間 (ミリ秒単位)。rareq-sz
: 平均読み取り要求サイズ (KB 単位)。w/s
: 1 秒あたりの書き込み操作数 (IOPS)。wMB/s
: 1 秒あたりの書き込みメガバイト数。w_await
: 書き込み待機時間 (ミリ秒単位)。wareq-size
: 書き込み要求の平均サイズ (KB 単位)。aqu-sz
: 平均キュー サイズ。
重要な考慮事項
r/s
、w/s
(IOPS)、rMB/s
、およびwMB/s
を探し、これらの値が指定されたディスクの制限内にあることを確認します。 値が制限に近い場合、または上限を超える場合、ディスクが調整され、待機時間が長くなります。 この情報は、mpstat
の%iowait
メトリックで補強することもできます。- 待機時間は、ディスクが期待どおりに動作するかどうかを確認するための優れたメトリックです。 通常、
9ms
未満は PremiumSSD で予想される待機時間です。 その他のオファリングでは、待機時間のターゲットが異なります。 - キュー サイズは、飽和状態を示す優れたインジケーターです。 通常、要求はほぼリアルタイムで処理され、数は 1 に近いままです (キューが増えることはありません)。 数値が大きいほど、ディスクの飽和状態 (つまり、要求のキューアップ) を示している可能性があります。 このメトリックの良い数値も悪い数値もありません。 1 より大きい数値を指定すると、要求がキューに入っていることを意味し、ディスクの飽和状態が発生しているかどうかを判断するのに役立ちます。
lsblk
lsblk
ユーティリティには、システムに接続されているブロック デバイスが表示されます。 パフォーマンス メトリックは提供されませんが、これらのデバイスの構成方法と使用されているマウント ポイントの概要を簡単に確認できます。
lsblk
を実行する方法の例を次に示します。
lsblk 出力を読み取る方法
lsblk
の出力例を次に示します。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 300G 0 disk
└─sda1 8:1 0 300G 0 part /mnt
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1M 0 part
├─sdb2 8:18 0 200M 0 part /boot/efi
├─sdb3 8:19 0 1G 0 part /boot
└─sdb4 8:20 0 28.8G 0 part /
zram0 252:0 0 16G 0 disk [SWAP]
重要な考慮事項
- デバイスがマウントされている場所を探します。
- 有効になっている場合は、スワップがデータ ディスクまたは OS ディスク内で構成されていないことを確認します。
- ブロック デバイスを Azure の LUN に関連付ける簡単な方法は、
ls -lr /dev/disk/azure
を実行することです。
プロセス
プロセスごとに詳細を収集すると、システムの負荷の発生元を理解するのに役立ちます。 プロセス統計を収集するための主なユーティリティは、各プロセスの CPU、メモリ、および I/O 統計の詳細を提供しているため、 pidstat
です。 最後に、上位の CPU とメモリ使用量でプロセスを並べ替える単純な ps
によって、メトリックが完了します。
Note
これらのコマンドには、現在のユーザーのプロセスだけでなく、実行中のすべてのプロセスの詳細を表示するために、 sudo
を使用したルート特権が必要です。
pidstat
pidstat
ユーティリティは、sysstat
パッケージの一部でもあります。 特定の時間範囲のメトリックを表示するという点で、 mpstat
や iostat のようなものです。 既定では、 pidstat
にはアクティビティを含むプロセスのメトリックのみが表示されます。
pidstat
の引数は、他のsysstat
ユーティリティの場合と同じです。
1
: 最初の数値引数は、表示を更新する頻度を秒単位で示します。2
: 2 番目の数値引数は、データが更新された回数を示します。
Note
アクティビティを含むプロセスが多数ある場合、出力は大幅に増加する可能性があります。
CPU 統計の処理
プロセス CPU 統計を収集するには、オプションを指定せずに pidstat
を実行します。
CPU 統計の出力を読み取る方法
pidstat
の出力例を次に示します。
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
# Time UID PID %usr %system %guest %wait %CPU CPU Command
16:55:48 0 66 0.0% 1.0% 0.0% 0.0% 1.0% 0 kworker/u16:2-xfs-cil/sdb4
16:55:48 0 70 0.0% 1.0% 0.0% 0.0% 1.0% 0 kworker/u16:6-xfs-cil/sdb4
16:55:48 0 92 0.0% 1.0% 0.0% 0.0% 1.0% 3 kworker/3:1H-kblockd
16:55:48 0 308 0.0% 1.0% 0.0% 0.0% 1.0% 1 kworker/1:1H-kblockd
16:55:48 0 2068 0.0% 1.0% 0.0% 0.0% 1.0% 1 kworker/1:3-xfs-conv/sdb4
16:55:48 0 2181 63.1% 1.0% 0.0% 35.9% 64.1% 5 stress-ng-cpu
16:55:48 0 2182 28.2% 0.0% 0.0% 70.9% 28.2% 6 stress-ng-cpu
16:55:48 0 2183 28.2% 0.0% 0.0% 69.9% 28.2% 7 stress-ng-cpu
16:55:48 0 2184 62.1% 0.0% 0.0% 36.9% 62.1% 0 stress-ng-cpu
16:55:48 0 2185 43.7% 0.0% 0.0% 54.4% 43.7% 2 stress-ng-cpu
16:55:48 0 2186 30.1% 0.0% 0.0% 68.0% 30.1% 7 stress-ng-cpu
16:55:48 0 2187 64.1% 0.0% 0.0% 34.0% 64.1% 3 stress-ng-cpu
このコマンドは、各プロセスの %usr
、 %system
、 %guest
(Azure には適用されません)、 %wait
、および合計 %CPU
使用量を表示します。
重要な考慮事項
- I/O の待機中にブロックされているプロセスを示している可能性があるため、
%wait
(アイオワット) の割合が高いプロセスを探します。これは、ディスクの飽和も示している可能性があります。 - シングル スレッド アプリケーションを示す可能性があるため、CPU の 100% を消費するプロセスが 1 つないことを確認します。
プロセス メモリの統計情報
プロセス メモリ統計を収集するには、 -r
オプションを使用します。
メモリ統計の出力を読み取る方法
pidstat
の出力例を次に示します。
Linux 5.14.0-362.8.1.el9_3.x86_64 (alma9) 02/21/24 _x86_64_ (8 CPU)
# Time UID PID minflt/s majflt/s VSZ RSS %MEM Command
16:55:49 0 2199 119244.12 0.00 13.6G 7.4G 23.5% stress-ng-vm
16:55:49 0 2200 392911.76 0.00 13.6G 9.3G 29.7% stress-ng-vm
16:55:49 0 2211 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
16:55:49 0 2220 0.98 0.00 71.8M 2.4M 0.0% stress-ng-iomix
16:55:49 0 2239 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
16:55:49 0 2240 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
16:55:49 0 2256 0.98 0.00 71.8M 2.4M 0.0% stress-ng-iomix
16:55:49 0 2265 1129.41 0.00 72.3M 3.2M 0.0% stress-ng-iomix
収集されるメトリックは次のとおりです。
minflt/s
: 1 秒あたりの軽微な障害。 このメトリックは、システム メモリ (RAM) から読み込まれたページの数を示します。mjflt/s
: 1 秒あたりの重大な障害。 このメトリックは、ディスク (SWAP) から読み込まれたページの数を示します。VSZ
: バイト単位で使用される仮想メモリ。RSS
: 使用された常駐メモリ (実際に割り当てられたメモリ) (バイト単位)。%MEM
: 使用されたメモリの合計に対する割合。Command
: プロセスの名前。
重要な考慮事項
- この値はディスクとの間でページをスワップしているプロセスを示すので、1 秒あたりの重大な障害を探します。 この動作は、メモリ不足を示し、
OOM
イベントや、スワップの速度低下によるパフォーマンスの低下につながる可能性があります。 - 1 つのプロセスが使用可能なメモリの 100% を消費していないことを確認します。 この動作は、メモリ リークを示している可能性があります。
ヒント
--human
オプションを使用すると、人間が判読できる形式 (KB、MB、GB) で数値を表示できます。
I/O 統計の処理
プロセス I/O 統計を収集するには、 -d
オプションを使用します。
pidstat
の出力例を次に示します。
# Time UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
16:55:50 0 86 55.4k 0.0B 0.0B 0 kworker/1:1-xfs-conv/sdb4
16:55:50 0 2201 4.0k 194.1k 0.0B 0 stress-ng-iomix
16:55:50 0 2202 0.0B 99.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2203 0.0B 23.8k 0.0B 0 stress-ng-iomix
16:55:50 0 2204 0.0B 15.8k 0.0B 0 stress-ng-iomix
16:55:50 0 2212 0.0B 103.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2213 4.0k 99.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2215 0.0B 178.2k 0.0B 0 stress-ng-iomix
16:55:50 0 2216 7.9k 237.6k 0.0B 0 stress-ng-iomix
16:55:50 0 2218 0.0B 95.0k 0.0B 0 stress-ng-iomix
16:55:50 0 2221 0.0B 15.8k 0.0B 0 stress-ng-iomix
収集されるメトリックは次のとおりです。
kB_rd/s
: 1 秒あたりキロバイトを読み取ります。kB_wr/s
: 1 秒あたりキロバイトを書き込みます。Command
: プロセスの名前。
重要な考慮事項
- 1 秒あたりの読み取り/書き込み率が高い 1 つのプロセスを探します。 この情報は、問題を特定するよりも、I/O を使用するプロセスのガイダンスです。
ヒント
--human
オプションを使用すると、人間が判読できる形式 (KB、MB、GB) で数値を表示できます。
ps
最後に、 ps
コマンドはシステム プロセスを表示し、CPU またはメモリで並べ替えることができます。
%CPU
で並べ替え、上位 10 個のプロセスを取得するには:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2190 94.8 0.0 73524 5588 pts/1 R+ 16:55 0:14 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2200 56.8 43.1 14248092 14175632 pts/1 R+ 16:55 0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2192 50.6 0.0 73524 5836 pts/1 R+ 16:55 0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2184 50.4 0.0 73524 5836 pts/1 R+ 16:55 0:07 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2182 44.3 0.0 73524 5808 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2187 43.4 0.0 73524 5708 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2199 42.9 33.0 14248092 10845272 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2186 42.0 0.0 73524 5836 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2191 41.2 0.0 73524 5592 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
%MEM
で並べ替え、上位 10 個のプロセスを取得するには:
PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2200 57.0 43.1 14248092 14175632 pts/1 R+ 16:55 0:08 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 2199 43.0 33.0 14248092 10871144 pts/1 R+ 16:55 0:06 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
root 1231 0.2 0.1 336308 33764 ? Sl 16:46 0:01 /usr/bin/python3 -u bin/WALinuxAgent-2.9.1.1-py3.8.egg -run-exthandlers
root 835 0.0 0.0 127076 24860 ? Ssl 16:46 0:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
root 1199 0.0 0.0 30164 15600 ? Ss 16:46 0:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root 1 0.2 0.0 173208 12356 ? Ss 16:46 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 31
root 966 0.0 0.0 3102460 10936 ? Sl 16:46 0:00 /var/lib/waagent/Microsoft.GuestConfiguration.ConfigurationforLinux-1.26.60/GCAgent/GC/gc_linux_service
panzer 1803 0.0 0.0 22360 8220 ? Ss 16:49 0:00 /usr/lib/systemd/systemd --user
root 2180 0.0 0.0 73524 6968 pts/1 SL+ 16:55 0:00 stress-ng --cpu 12 --vm 2 --vm-bytes 120% --iomix 4 --timeout 240
レポートを統合する
次の Bash スクリプトでは、すべての詳細を 1 回の実行で収集し、後で参照できるように出力をファイルに追加できます。
mpstat -P ALL 1 2 && vmstat -w 1 5 && uptime && free -h && swapon && iostat -dxtm 1 1 && lsblk && ls -l /dev/disk/azure && pidstat 1 1 -h --human && pidstat -r 1 1 -h --human && pidstat -d 1 1 -h --human && ps aux --sort=-%cpu | head -20 && ps aux --sort=-%mem | head -20
実行するには、上記のコンテンツを含むファイルを作成し、chmod +x gather.sh
を実行してexecute
アクセス許可を追加してから、sudo ./gather.sh
で実行します。
このスクリプトは、コマンドの出力を、スクリプトが呼び出されたのと同じディレクトリにあるファイルに保存します。
さらに、このドキュメントで説明する Bash ブロック コード内のすべてのコマンドは、 run-command
拡張機能を使用して Azure CLI を使用して実行し、 jq
を介して出力を解析して、コマンドをローカルで実行するのと同様の出力を取得できます。
az vm run-command invoke -g $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts "ls -l /dev/disk/azure" | jq -r '.value[0].message'
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。