次の方法で共有


Linux VM のパフォーマンス メトリックを収集する

適用対象: ✔️ Linux VM

この記事では、Sysstat ユーティリティ (パフォーマンス監視ツール) を使用して、Microsoft Azure の Linux 仮想マシン (VM) からパフォーマンス メトリックを取得する方法について説明します。 これらのユーティリティを使用して出力を読み取る方法の例を示します。

Linux でパフォーマンス カウンターを収集するために、いくつかのコマンドを使用できます。 vmstatuptimeなどのコマンドは、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:

sudo apt install sysstat -y

Red Hat:

sudo dnf install sysstat -y

SUSE:

sudo zypper install sysstat --non-interactive

CPU

mpstat

mpstat コマンドは、sysstat パッケージの一部です。 CPU 使用率と各 CPU の平均が表示されます。これは、CPU 使用率を特定するのに役立ちます。 mpstat コマンドは、使用可能な CPU の CPU 使用率の概要を示し、使用量のバランスと、単一の CPU が過負荷になっているかどうかを識別するのに役立ちます。

mpstatを実行する方法の例を次に示します。

mpstat -P ALL 1 2
  • -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を実行する方法の例を次に示します。

vmstat -w 1 5
  • -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

アップタイム出力を読み取る方法

uptimeの出力例を次に示します。

16:55:53 up 9 min,  2 users,  load average: 9.26, 2.91, 1.18

load averageには 3 つの数値が表示されます。 これらの数値は、 15、および 15 分間隔でのシステム負荷に対応します。

これらの値を解釈するには、システムで使用可能な CPU の数を把握することが重要です。これは、前の mpstat 出力から取得されます。 値は CPU の合計数によって異なるため、例として mpstat 出力を使用すると、システムには 8 個の CPU があり、 8 の負荷平均は、すべてのコアが 100% で読み込まれることを意味します。

4の値は、CPU の半分が 100% (またはすべての CPU の場合は合計負荷 50%) で読み込まれることを意味します。 前の出力では、負荷平均は 9.26です。つまり、CPU は約 115% で読み込まれます。

1m5m、および15m間隔は、時間の経過と同時に負荷が増加または減少しているかどうかを識別するのに役立ちます。

さらに、 nproc コマンドを使用して CPU の数を取得できます。

[メモリ]

メモリの場合、2 つのコマンドでメモリ使用量の詳細を取得できます。

制限なし

free コマンドは、システム メモリ使用率を示します。

freeを実行する方法の例を次に示します。

free -h
  • -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 メモリ、および usedtotal スワップを確認します。 使用可能なメモリは、キャッシュに割り当てられたメモリを考慮し、ユーザー アプリケーションに返すことができます。 最近のカーネルではスワップの使用が普通ですが、使用頻度の低いメモリ ページの中にはスワップに移動できるものもあります。

swapon

swapon コマンドは、スワップが構成されている場所と、スワップ デバイスまたはファイルのそれぞれの優先順位を表示します。

swaponを実行する方法の例を次に示します。

swapon -s

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を実行する方法の例を次に示します。

iostat -dxtm 1 5
  • -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/sw/s (IOPS)、rMB/s、およびwMB/sを探し、これらの値が指定されたディスクの制限内にあることを確認します。 値が制限に近い場合、または上限を超える場合、ディスクが調整され、待機時間が長くなります。 この情報は、mpstat%iowaitメトリックで補強することもできます。
  • 待機時間は、ディスクが期待どおりに動作するかどうかを確認するための優れたメトリックです。 通常、 9ms 未満は PremiumSSD で予想される待機時間です。 その他のオファリングでは、待機時間のターゲットが異なります。
  • キュー サイズは、飽和状態を示す優れたインジケーターです。 通常、要求はほぼリアルタイムで処理され、数は 1 に近いままです (キューが増えることはありません)。 数値が大きいほど、ディスクの飽和状態 (つまり、要求のキューアップ) を示している可能性があります。 このメトリックの良い数値も悪い数値もありません。 1 より大きい数値を指定すると、要求がキューに入っていることを意味し、ディスクの飽和状態が発生しているかどうかを判断するのに役立ちます。

lsblk

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 を実行します。

pidstat 1 2
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 -r 1 2
メモリ統計の出力を読み取る方法

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 -d 1 2

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 個のプロセスを取得するには:

ps aux --sort=-%cpu | head -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 個のプロセスを取得するには:

ps aux --sort=-%mem| head -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 フィードバック コミュニティに製品フィードバックを送信することもできます。