共用方式為


收集 Linux VM 的效能計量

適用於:✔️ Linux VM

本文說明如何使用 Sysstat 公用程式(效能監視工具),從 Microsoft Azure 中的 Linux 虛擬機 (VM) 擷取效能計量。 它提供如何使用這些公用程式並讀取其輸出的範例。

有數個命令可用於收集Linux上的性能計數器。 和 uptime 之類的vmstat命令提供基本的系統計量,例如 CPU 使用量、系統記憶體和系統負載。 大部分的命令預設會預安裝,而其他命令則可以輕鬆地從預設存放庫存取。

根據計量的類型,這些命令可以分類為:

安裝適用於Linux的Sysstat公用程式

您可以使用 Bash 命令或透過 Azure CLI 執行 命令,在 Linux VM 上安裝 Sysstat 公用程式 。 如果您使用本文中提供的 Azure CLI 命令,請確定已設定下列兩個環境變數。 您必須將資源組名和 VM 名稱取代為實際值。

export MY_RESOURCE_GROUP_NAME="yourResourceGroup"
export MY_VM_NAME="yourVM"

注意

下列某些命令需要根許可權。

若要在 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:第二個數值自變數會指定應該顯示統計數據的次數 mpstat 。 在此情況下,它會以一秒間隔列印兩個統計數據。

您可以增加自變數的次數,以容納較長的數據收集時間。 一般而言,三到五秒就足夠了。 對於核心計數較高的系統,將其縮減為兩秒,有助於管理所顯示的數據量。

如何讀取 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:虛擬 CPU 的 CPU 時間百分比,其花在為 VM 服務時的價值相當好(不適用於 Azure;僅與執行 VM 的裸機系統相關)。
  • %idle:閑置且未等候 I/O 要求的 CPU 時間百分比。

主要考量

檢閱 的輸出 mpstat時的重要考慮:

  • 確認所有 CPU 都已正確載入,而不是單一 CPU 會提供所有負載。 此資訊可能表示單個線程應用程式。
  • 在和 %sys之間%usr尋找狀況良好的平衡,因為相反的會指出實際工作負載所花費的時間比提供核心進程還要多。
  • 尋找 %iowait 百分比,因為高值可能表示系統持續等候 I/O 要求。
  • %soft 使用量可能表示高網路流量。

vmstat

vmstat 公用程式可在大部分的Linux發行版中廣泛提供。 它提供單一窗格中 CPU、記憶體和磁碟 I/O 使用率的高階概觀。

以下是如何執行 vmstat的範例:

vmstat -w 1 5
  • -w:使用寬角列印來保留一致的欄。
  • 1:第一個數值自變數會指定每個報表之間的間隔以秒為單位。 在此情況下,vmstat 會每隔一秒輸出報告一次。
  • 5:第二個數值自變數會指定 vmstat 應該產生的報告數目。 在此指定時 5 ,vmstat 將產生總共五份報告。

如何讀取 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

輸出會分類為下列六個群組。 輸出會顯示整個系統的整體統計數據(也就是匯總的所有 CPU 和區塊裝置)。

  • procs:進程的統計數據。
  • memory:系統記憶體的統計數據。
  • swap:交換的統計數據。
  • io:磁碟 I/O 的統計數據。
  • system:內容切換和中斷的統計數據。
  • cpu:CPU 使用量的統計數據。

procs

procs段有兩個數據行:

  • r:執行佇列中可執行的進程數目。
  • b:已封鎖等候 I/O 的進程數目。

本節會立即顯示系統中是否有任何瓶頸。 任一數據行上的高數位表示進程佇列和等候資源。

數據 r 行指出正在等候 CPU 時間執行的進程數目。 解譯這個數字的簡單方式如下:如果佇列中的 r 進程數目高於 CPU 總數,則可以推斷系統 CPU 負載過重,無法配置等待執行之所有進程的 CPU 時間。

數據 b 行指出等候執行並遭到 I/O 要求封鎖的進程數目。 此數據行中的高數位表示遇到高 I/O 的系統,而且進程無法執行,因為其他進程等待 I/O 要求完成。 這也表示磁碟延遲很高。

memory

記憶體區段有四個數據行。 這些值會以位元組顯示。 本節提供記憶體使用量的高階概觀。

  • swpd:使用的交換記憶體數量。
  • free:可用記憶體的數量。
  • buff:用於緩衝區的記憶體數量。
  • cache:用於快取的記憶體數量。

swap

swap段有兩個數據行:

  • si:每秒交換的記憶體數量(從系統記憶體移至交換)。
  • so:每秒交換的記憶體數量(從交換移至系統記憶體)。

如果觀察到高 si ,它可能代表系統記憶體用盡,並將頁面移至交換(swapping) 的系統。

io

io段有兩個數據行。 這些值以每秒的區塊為單位。

  • bi:每秒從區塊裝置接收的區塊數目(每秒讀取區塊數)。
  • bo:每秒傳送至區塊裝置的區塊數目(每秒寫入數)。

系統

系統區段有兩個資料列:

  • in:每秒中斷的次數。
  • cs:每秒的內容切換數目。

每秒大量中斷可能表示忙碌於硬體裝置的系統(例如網路作業)。

大量內容切換可能表示具有許多短期執行進程的忙碌系統。 這裡沒有好或壞的數位。

中央處理器

cpu 段有五個數據行:

  • 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 三個數位。 這些數字會對應至、 515 分鐘間隔中的1系統負載。

若要解譯這些值,請務必知道系統中可用的CPU數目,這是從先前 mpstat 輸出取得的。 此值取決於 CPU 總數,因此使用 mpstat 輸出作為範例,系統具有八個 CPU,而的負載平均值 8 表示所有核心都以 100% 載入。

值為 4 表示 CPU 的一半會以 100% 載入(或所有 CPU 的總負載為 50%) 。 在上一個輸出中,負載平均為 9.26,這表示 CPU 會載入約 115%。

1m5m15m 間隔有助於識別負載是否隨著時間增加或減少。

此外, nproc 命令可用來擷取 CPU 數目。

記憶體

針對記憶體,兩個命令可以擷取記憶體使用量詳細數據。

free

命令 free 會顯示系統記憶體使用率。

以下是如何執行 free的範例:

free -h
  • -h:此選項會指定要為人類可讀取的輸出格式。 它會將記憶體大小從位元組轉換成更易讀的格式(KB、MB 和 GB),並附加適當的單位標籤(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 -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 接近零的免費值很常見。 此行為是由於頁面快取所造成;核心會視需要釋放這些頁面。

I/O

磁碟 I/O 是 Azure 節流時遭受最多影響的區域之一,因為磁碟的延遲可能會到達 100ms+。 下列命令可協助識別這些案例。

iostat

公用 iostat 程式是封裝的 sysstat 一部分。 它會顯示每個區塊裝置的使用方式統計數據,並協助識別區塊相關的效能問題。 它會提供有關計量的詳細數據,例如輸送量、延遲和佇列大小。 這些計量有助於瞭解磁碟 I/O 是否成為限制因素。

以下是如何執行 iostat的範例:

iostat -dxtm 1 5
  • -d:每個裝置的使用方式報告。
  • -x:擴充的統計數據。
  • -t:顯示每個報表的時間戳。
  • -m:以 MB/秒顯示。
  • 1:第一個數值自變數會指出以秒為單位重新整理顯示的頻率。
  • 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:每秒讀取作業數(IOPS)。
  • rMB/s:每秒讀取 MB。
  • r_await:以毫秒為單位讀取延遲。
  • rareq-sz:以 KB 為單位的平均讀取要求大小。
  • w/s:每秒寫入作業數(IOPS)。
  • wMB/s:每秒寫入 MB。
  • w_await:以毫秒為單位寫入延遲。
  • wareq-size:平均寫入要求大小以 KB 為單位。
  • aqu-sz:平均佇列大小。

主要考量

  • 尋找 r/sw/s (IOPS)、 rMB/s、 和 wMB/s,並確認這些值位於指定磁碟的限制內。 如果值接近或高於限制,磁碟將會受到節流,導致高延遲。 這項資訊也可以與 來自mpstat%iowait計量進行證實。
  • 延遲是確認磁碟是否如預期般執行的絕佳計量。 一般而言,PremiumSSD 的預期延遲小於 9ms 。 其他供應專案有不同的延遲目標。
  • 佇列大小是飽和度的絕佳指標。 一般而言,要求會以近乎即時的方式提供,而且數目仍接近一個要求(因為佇列永遠不會成長)。 較高的數位可能表示磁碟飽和度(也就是要求佇列)。 此計量沒有好壞的數位。 了解高於一個的數位表示要求排入佇列有助於判斷是否有磁碟飽和度。

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

處理

根據每個進程收集詳細數據有助於了解系統負載的來源。 收集進程統計數據的主要公用程式是 pidstat,因為它提供每個進程CPU、記憶體和I/O統計數據的詳細數據。 最後,依 CPU 和記憶體使用量排序程式的簡單 ps 方式會完成計量。

注意

這些命令需要使用 根許可權 sudo 來顯示所有執行中進程的詳細數據,而不只是目前使用者的詳細數據。

pidstat

公用 pidstat 程式也是封裝的 sysstat 一部分。 就像 或iostat一樣 mpstat ,它會顯示指定時間範圍的計量。 根據預設, pidstat 只會針對具有活動的處理程序顯示計量。

的自變數 pidstat 與其他 sysstat 公用程式相同:

  • 1:第一個數值自變數會指出以秒為單位重新整理顯示的頻率。
  • 2:第二個數值自變數表示數據重新整理的次數。

注意

如果有許多具有活動的處理程序,輸出可能會大幅增加。

處理 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 使用量。

主要考量
  • 尋找高 %wait (愛荷華州) 百分比的進程,因為它可能表示已封鎖等候 I/O 的進程,這也可能表示磁碟飽和度。
  • 確認沒有單一進程耗用 100% 的 CPU,因為它可能表示單個線程的應用程式。

處理記憶體統計數據

若要收集進程記憶體統計數據,請使用 -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:每秒發生次要錯誤。 此計量表示從系統記憶體 (RAM) 載入的頁面數目。
  • mjflt/s:每秒發生重大錯誤。 此計量表示從磁碟載入的頁面數目(SWAP)。
  • VSZ:位元組中使用的虛擬記憶體。
  • RSS:以位元組為單位使用的常駐記憶體(實際配置的記憶體)。
  • %MEM:使用的記憶體總計百分比。
  • Command:進程的名稱。
主要考量
  • 尋找每秒的主要錯誤,因為此值會指出將頁面交換至磁碟或從磁碟交換的進程。 此行為可能表示記憶體耗盡,並導致 OOM 事件或效能降低,因為交換速度較慢。
  • 確認單一進程不會耗用 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:每秒讀取 KB。
  • kB_wr/s:每秒寫入 KB。
  • Command:進程的名稱。
主要考量
  • 尋找每秒高讀取/寫入率的單一進程。 此資訊是 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 指令本可以收集單一執行中的所有詳細數據,並將輸出附加至檔案以供日後參考:

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區塊代碼中的所有命令都可以透過 Azure CLI 執行,並使用 run-command 擴充功能剖析輸出,以取得類似在本機執行命令的輸出 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'

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。