天天看點

Linux 系統監測 —— sysstatLinux 系統監測 —— sysstat

Linux 系統監測 —— sysstat

sysstat 是Linux系統伺服器中常用的軟體工具包,可以用來監控伺服器的性能。主要包含的工具:

  • iostat 工具提供CPU使用率及硬碟吞吐效率的資料; #比較核心的工具
  • mpstat 工具提供單個處理器或多個處理器相關資料;
  • pidstat: 關于運作中的程序/任務、CPU、記憶體等的統計資訊
  • sar 工具負責收集、報告并存儲系統活躍的資訊; #統計資料的核心工具
  • sa1 工具負責收集并存儲每天系統動态資訊到一個二進制的檔案中。它是通過計劃任務工具cron來運作,是為sadc所設計的程式前端程式;
  • sa2工具負責把每天的系統活躍性息寫入總結性的報告中。它是為sar所設計的前端 ,要通過cron來調用
  • sadc 是系統動态資料收集工具,收集的資料被寫一個二進制的檔案中,它被用作sar工具的後端;
  • sadf 顯示被sar通過多種格式收集的資料;
  • nfsiostat: NFS(Network File System)的I/O統計資訊。
  • cifsiostat: CIFS(Common Internet File System)的統計資訊

iostat

iostat [ 選項 ] [ <時間間隔> [ <次數> ] ]
選項:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -o JSON ]
[ [ -H ] -g <使用者組名> ] [ -p [ <裝置> [,...] | ALL ] ]
[ <裝置> [...] | ALL ]
           

參數釋義:

-c : 僅顯示cpu的狀态

-d : 僅顯示儲存設備的狀态,不可以和-c一起使用

-k :預設顯示的是讀入讀出的block資訊,用-k可以改成KB大小來顯示 -m

-t : 顯示日期-p device | ALL :device為某個裝置或者某個分區,如果使用ALL,就表示要顯示所有分區和裝置的資訊

-x: 顯示更多擴充内容

示例:

[email protected]:~$ iostat -c 1 3
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.01    0.10    0.00    0.00   99.84


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.26    0.00    0.50    0.00    0.00   98.24


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.02    0.00    2.27    0.00    0.00   95.72
           

mpstat

mpstat (multi processor?)用于多處理器系統中的CPU的使用率的統計。特點是可以細化到具體某個cpu的狀态時可以使用參數-P,處理器的ID從0開始

mpstat [ 選項 ] [ <時間間隔> [ <次數> ] ]
選項:
[ -I { SUM | CPU | SCPU | ALL } ] 
[ -N { <node_list> | ALL } ]
[ --dec={ 0 | 1 | 2 } ] [ -o JSON ] 
[ -P { <CPU_清單> | ALL } ]
           

示例:

[email protected]:~$ mpstat 1 3
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17時00分33秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17時00分34秒  all    1.01    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   97.98
17時00分35秒  all    1.75    0.00    0.75    0.00    0.00    0.00    0.00    0.00    0.00   97.49
17時00分36秒  all    0.50    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   99.24
平均時間:  all    1.09    0.00    0.67    0.00    0.00    0.00    0.00    0.00    0.00   98.24

[email protected]:~$ mpstat -P 0 1 3
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17時24分42秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17時24分43秒    0    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00

17時24分43秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17時24分44秒    0    2.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00

17時24分44秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17時24分45秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

平均時間:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均時間:    0    0.67    0.00    0.34    0.00    0.00    0.00    0.00    0.00    0.00   98.99
           

輸出中各列的含義說明:

%user 顯示在使用者級别(application)運作使用 CPU 總時間的百分比。

%nice 顯示在使用者級别,用于nice操作,所占用 CPU 總時間的百分比。

%system 在核心級别(kernel)運作所使用 CPU 總時間的百分比。

%iowait 顯示用于等待I/O操作占用 CPU 總時間的百分比。

%irq 顯示在interval時間段内,硬中斷占用的CPU總時間。

%soft 顯示在interval時間段内,軟中斷占用的CPU總時間。

%steal 管理程式(hypervisor)為另一個虛拟程序提供服務而等待虛拟CPU的百分比。

%idle 顯示 CPU 空閑時間占用CPU總時間的百分比。

intr/s 在internal時間段裡,每秒CPU接收的中斷的次數。

pidstat

pidstat 用于監控全部或指定程序的cpu、記憶體、線程、裝置IO等系統資源的占用情況。pidstat首次運作時顯示自系統啟動開始的各項統計資訊,之後運作pidstat将顯示自上次運作該指令以後的統計資訊。我們可以通過指定統計次數和時間來獲得所需的統計資訊。

pidstat [ 選項 ] [ <時間間隔> ] [ <次數> ]

-u:預設的參數,顯示各個程序的cpu使用統計
-r:顯示各個程序的記憶體使用統計
-d:顯示各個程序的IO使用情況
-p:指定程序号
-w:顯示每個程序的上下文切換情況
-t:顯示選擇任務的線程的統計資訊外的額外資訊
-T { TASK | CHILD | ALL }
這個選項指定了pidstat監控的。TASK表示報告獨立的task,CHILD關鍵字表示報告程序下所有線程統計資訊。ALL表示報告獨立的task和task下面的所有線程。
注意:task和子線程的全局的統計資訊和pidstat選項無關。這些統計資訊不會對應到目前的統計間隔,這些統計資訊隻有在子線程kill或者完成的時候才會被收集。
-V:版本号
-h:在一行上顯示了所有活動,這樣其他程式可以容易解析。
-I:在SMP環境,表示任務的CPU使用率/核心數量
-l:顯示指令名和所有參數
           

檢視所有程序的CPU使用情況:

pidstat -u -p ALL

檢視程序的内容使用情況:

pidstat -r

[email protected]:~$ pidstat -r
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17時41分15秒   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
17時41分15秒     0         1      0.57      0.00  225736    9536   0.12  systemd
17時41分15秒     0       401      0.32      0.00  129540   34016   0.42  systemd-journal
17時41分15秒     0       425      2.41      0.00   47528    5416   0.07  systemd-udevd
17時41分15秒   101       674      0.00      0.00   70740    5884   0.07  systemd-resolve
17時41分15秒 62583       675      0.00      0.00  145964    3232   0.04  systemd-timesyn
           

輸出各列說明:

PID:程序辨別符

Minflt/s:任務每秒發生的次要錯誤,不需要從磁盤中加載頁

Majflt/s:任務每秒發生的主要錯誤,需要從磁盤中加載頁

VSZ:虛拟位址大小,虛拟記憶體的使用KB

RSS:常駐集合大小,非交換區五裡記憶體使用KB

Command:task指令名

檢視各個程序的IO情況:

pidstat -d

[email protected]:~$ pidstat -d
Linux 5.4.0-91-generic (cfs) 	2022年01月15日 	_x86_64_	(4 CPU)

17時48分10秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
17時48分10秒     0         1     -1.00     -1.00     -1.00      24  systemd
17時48分10秒     0       358     -1.00     -1.00     -1.00     872  jbd2/sda1-8
17時48分10秒     0       401     -1.00     -1.00     -1.00      42  systemd-journal
17時48分10秒     0       425     -1.00     -1.00     -1.00       4  systemd-udevd
           

報告IO統計顯示以下資訊:

  • PID:程序id
  • kB_rd/s:每秒從磁盤讀取的KB
  • kB_wr/s:每秒寫入磁盤KB
  • kB_ccwr/s:任務取消的寫入磁盤的KB。當任務截斷髒的pagecache的時候會發生。
  • COMMAND:task的指令名

檢視任務上下文切換情況:

pidstat -w -p PID

[email protected]:~$ pidstat -w -p 871
Linux 5.4.0-91-generic (cfs) 	2022年01月16日 	_x86_64_	(4 CPU)

01時14分18秒   UID       PID   cswch/s nvcswch/s  Command
01時14分18秒   124       871      9.89      0.00  redis-server
           
  • PID:程序id
  • Cswch/s:每秒主動任務上下文切換數量
  • Nvcswch/s:每秒被動任務上下文切換數量
  • Command:指令名

顯示選擇任務的線程的統計資訊外的額外資訊:

pidstat -t -p pid

[email protected]:~$ pidstat -t -p 871
Linux 5.4.0-91-generic (cfs) 	2022年01月16日 	_x86_64_	(4 CPU)

11時27分06秒   UID      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
11時27分06秒   124       871         -    0.02    0.06    0.00    0.00    0.08     1  redis-server
11時27分06秒   124         -       871    0.02    0.06    0.00    0.00    0.08     1  |__redis-server
11時27分06秒   124         -       874    0.00    0.00    0.00    0.00    0.00     0  |__redis-server
11時27分06秒   124         -       875    0.00    0.00    0.00    0.00    0.00     2  |__redis-server
11時27分06秒   124         -       876    0.00    0.00    0.00    0.00    0.00     2  |__redis-server
           

TGID:主線程的表示

TID:線程id

%usr:程序在使用者空間占用cpu的百分比

%system:程序在核心空間占用cpu的百分比

%guest:程序在虛拟機占用cpu的百分比

%CPU:程序占用cpu的百分比

CPU:處理程序的cpu編号

Command:目前程序對應的指令

pidstat -T

pidstat -T TASK
pidstat -T CHILD
pidstat -T ALL
           

TASK: 報告獨立的task。

CHILD: 報告程序下所有線程統計資訊。

ALL: 報告獨立的task和task下面的所有線程。

task和子線程的全局的統計資訊和pidstat選項無關。這些統計資訊不會對應到目前的統計間隔,這些統計資訊隻有在子線程kill或者完成的時候才會被收集。

[email protected]:~$ pidstat -T ALL -p 871
Linux 5.4.0-91-generic (cfs) 	2022年01月16日 	_x86_64_	(4 CPU)

11時52分55秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11時52分55秒   124       871    0.02    0.06    0.00    0.00    0.08     1  redis-server

11時52分55秒   UID       PID    usr-ms system-ms  guest-ms  Command
11時52分55秒   124       871    111400    325180         0  redis-server
           

PID:程序id

Usr-ms:任務和子線程在使用者級别使用的毫秒數。

System-ms:任務和子線程在系統級别使用的毫秒數。

Guest-ms:任務和子線程在虛拟機(running a virtual processor)使用的毫秒數。

Command:指令名

繼續閱讀