簡介
Sysstat 是一套在Linux系統中廣泛使用的效能監控工具集,主要用於收集和分析系統的各種效能統計資訊。它包含了多個命令列工具,這些工具能夠幫助系統管理員和開發人員實時或週期性地監控伺服器的CPU使用率、記憶體使用、磁碟I/O、網路流量以及其他重要的系統資源指標。
主要包含的工具如下:
-
sar (System Activity Reporter):用於報告系統的CPU、記憶體、程序、I/O裝置以及網路等資源的利用率和統計資料。可以生成實時報告,也可以讀取先前記錄的日誌檔案生成歷史報告。
-
iostat:用於監視系統的中央處理器(CPU)使用情況以及磁碟操作的統計資訊,包括每塊硬碟的讀寫運算元、資料量和延遲時間等。
-
mpstat:多處理器狀態監控工具,用於顯示每個CPU核心的活動以及整個系統的平均CPU負載。
-
pidstat:用來監控程序級別的CPU、記憶體、I/O和上下文切換等資源使用情況。
-
sadc:sysstat資料收集器,負責根據配置定期收集系統效能資料並儲存到日誌檔案中。
-
sarstat:此命令可能存在於某些舊版本的sysstat包中,但現在通常由
sar
命令代替,用於處理和展示sadc
收集的資料。 -
sadf:用來讀取由
sadc
收集並儲存的資料,並以多種格式(例如CSV、XML或JSON)顯示這些資料。它允許使用者檢視歷史效能報告,分析系統過去的資源利用情況,以及生成視覺化圖表(如SVG)來更好地理解系統的負載變化趨勢。 -
vmstat:用於報告虛擬記憶體統計資訊,如程序、記憶體、paging、block IO、CPU 活動等。它可以幫助你監控系統的效能和資源使用情況。
Sysstat可以透過cron任務定時收集系統統計資訊,並將其儲存在 /var/log/sa/
或者 /var/log/sysstat
目錄下的每日日誌檔案中。這些資料對於長期趨勢分析和系統瓶頸排查非常有用。透過配置/etc/sysconfig/sysstat
或 /etc/default/sysstat
(根據不同Linux發行版),可以定製sysstat的收集頻率和日誌保留策略。
安裝
sysstat
是一個用於監控系統效能的工具集,包括 iostat
、mpstat
、pidstat
和 sar
等工具。要在不同的作業系統上安裝 sysstat
,請按照以下說明進行操作:
對於基於 Debian 的系統(如 Ubuntu):
sudo apt-get update
sudo apt-get install sysstat
對於基於 RHEL 的系統(如 CentOS、Fedora):
sudo yum install sysstat
sar命令
sar命令很強大,是分析系統效能的重要工具之一
透過sar指令,可以全面的獲取系統的CPU、執行佇列、磁碟I/O、分頁(交換區)、記憶體、CPU中斷、網路等效能資料。
sar使用格式為:
sar [options] [-o filename] [interval [count] ]
各個選項及引數含義如下:
options 為命令列選項
sar命令的選項很多,下面只列出常用選項:
-
-A:顯示系統所有資源裝置(CPU、記憶體、磁碟)的執行狀況。
-
-u:顯示系統所有CPU在取樣時間內的負載狀態。預設
-
-P:顯示當前系統中指定CPU的使用情況。
-
-d:顯示系統所有硬碟裝置在取樣時間內的使用狀況。
-
-r:顯示系統記憶體在取樣時間內的使用狀況。
-
-b:顯示緩衝區在取樣時間內的使用情況。
-
-v:顯示程序、檔案、I節點和鎖表狀態。
-
-n:顯示網路執行狀態。引數後面可跟DEV、EDEV、SOCK和FULL。DEV顯示網路介面資訊,EDEV顯示網路錯誤的統計資料,SOCK顯示套接字資訊,FULL顯示三個所有的資訊。它們可以單獨或者一起使用。
-
-q:顯示執行列表中的程序數、程序大小、系統平均負載等
-
interval:表示取樣間隔時間,是必須有的引數。
-
count:表示取樣次數,是可選引數,預設值是1。
CPU使用情況
$ sar -u 3 5 #檢視系統 CPU 的整理負載狀況,每 3 秒統計一次,統計 5 次
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
21時00分58秒 CPU %user %nice %system %iowait %steal %idle
21時01分01秒 all 0.00 0.00 0.00 0.00 0.00 100.00
21時01分04秒 all 0.00 0.00 0.33 0.00 0.00 99.67
21時01分07秒 all 0.00 0.00 0.00 0.00 0.00 100.00
21時01分10秒 all 0.00 0.00 0.00 0.00 0.00 100.00
21時01分13秒 all 0.00 0.00 0.00 0.00 0.00 100.00
平均時間: all 0.00 0.00 0.07 0.00 0.00 99.93
$ sar -P 0 #0號cpu的負載情況
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
20時00分16秒 LINUX RESTART
20時10分01秒 CPU %user %nice %system %iowait %steal %idle
20時20分01秒 0 0.01 0.00 0.07 0.00 0.00 99.93
20時30分01秒 0 0.21 0.00 0.19 0.01 0.00 99.59
20時40分01秒 0 0.00 0.00 0.07 0.00 0.00 99.93
20時50分01秒 0 0.00 0.00 0.07 0.00 0.00 99.93
21時00分01秒 0 0.00 0.00 0.07 0.00 0.00 99.93
21時10分01秒 0 0.00 0.00 0.07 0.00 0.00 99.93
平均時間: 0 0.04 0.00 0.09 0.00 0.00 99.87
輸出說明
%user
:用於表示使用者模式下消耗的 CPU 時間的比例;%nice
:透過 nice 改變了程序排程優先順序的程序,在使用者模式下消耗的 CPU 時間的比例;%system
:系統模式下消耗的 CPU 時間的比例;%iowait
:CPU 等待磁碟 I/O 導致空閒狀態消耗的時間比例;%steal
:虛擬機器偷走的時間比例;%idle
:CPU 空閒時間比例。
塊使用情況
$ sar -d 3 2 #檢視每個塊的讀寫效能 3秒一次 統計2次
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
21時03分52秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
21時03分55秒 dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時03分55秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時03分55秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
21時03分58秒 dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時03分58秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
平均時間: dev11-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
tps
: 每秒程序下發的IO讀、寫請求數量rd_sec/s
: 每秒讀取扇區的次數wr_sec/s
:每秒寫扇區的次數;avgrq-sz
:平均每次裝置 I/O 操作的資料大小(扇區);avgqu-sz
:磁碟請求佇列的平均長度;await
:從請求磁碟操作到系統完成處理,每次請求的平均消耗時間,包括請求佇列等待時間,單位是毫秒(1 秒=1000 毫秒);svctm
:系統處理每次請求的平均時間,不包括在請求佇列中消耗的時間;%util
:I/O 請求佔 CPU 的百分比,比率越大,說明越飽和。
記憶體使用情況
$ sar -r
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
20時00分16秒 LINUX RESTART
20時10分01秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
20時20分01秒 1559432 468424 23.10 2104 151744 812788 13.06 103848 118948 0
20時30分01秒 1450660 577196 28.46 2104 256724 812788 13.06 189196 138544 0
20時40分01秒 1450768 577088 28.46 2104 256728 812788 13.06 189212 138540 4
20時50分01秒 1451036 576820 28.44 2104 256700 812248 13.05 189040 138524 4
21時00分01秒 1451292 576564 28.43 2104 256812 812248 13.05 189044 138632 0
21時10分01秒 1451208 576648 28.44 2104 256820 812248 13.05 189044 138568 0
平均時間: 1469066 558790 27.56 2104 239255 812518 13.06 174897 135293 1
kbmemfree
剩餘記憶體總量kbmemused
使用的記憶體總量,使用量=總記憶體-剩餘記憶體-buffer-cache-slab%memused
已使用記憶體的佔比kbbuffers
被核心用來作為buffer的記憶體量kbcached
被核心用來作為cache的記憶體量kbcommit
當前工作負載下,可以保證不出現記憶體不足的記憶體量%commit
指kbcommit佔記憶體/swap的百分率kbactive
當前活躍記憶體量。除非萬不得已,這部分記憶體才會被回收kbinact
當前非活躍記憶體總量,當記憶體不足時,這部分記憶體最容易被核心收回kbdirty
髒頁大小,髒頁指的是暫存於記憶體還沒來得及持久化到硬碟的資料。可以使用sync刷入硬碟
磁碟I/O和傳送速率監控
$ sar -b
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
20時00分16秒 LINUX RESTART
20時10分01秒 tps rtps wtps bread/s bwrtn/s
20時20分01秒 0.09 0.00 0.09 0.05 1.19
20時30分01秒 1.58 1.00 0.58 93.72 264.15
20時40分01秒 0.11 0.00 0.11 0.00 3.54
20時50分01秒 0.07 0.00 0.07 0.00 0.93
21時00分01秒 0.04 0.00 0.03 0.36 0.42
21時10分01秒 0.11 0.00 0.11 0.00 1.59
21時20分01秒 0.02 0.00 0.02 0.00 0.29
平均時間: 0.29 0.14 0.15 13.45 38.87
tps
每秒鐘物理裝置的 I/O 傳輸總量rtps
每秒鐘從物理裝置讀入的資料總量wtps
每秒鐘向物理裝置寫入的資料總量bread/s
每秒鐘從物理裝置讀入的資料量,單位為 塊/s 塊的大小等同於一個扇區的大小,512位元組bwrtn/s
每秒鐘向物理裝置寫入的資料量,單位為 塊/s
inode、檔案和其他核心表監控
$ sar -v
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
20時00分16秒 LINUX RESTART
20時10分01秒 dentunusd file-nr inode-nr pty-nr
20時20分01秒 47663 2048 58549 1
20時30分01秒 49873 2080 58855 1
20時40分01秒 49873 2048 58849 1
20時50分01秒 49882 2048 58830 1
21時00分01秒 49908 2048 58834 1
21時10分01秒 49920 2048 58834 1
21時20分01秒 49927 2048 58834 1
平均時間: 49578 2053 58798 1
dentunusd
目錄快取記憶體中未被使用的條目數量file-nr
系統使用的檔案控制代碼數inode-nr
系統使用的inode處理程式數pty-nr
開啟的偽終端數,即幾個人登陸了系統
對網路的監控
sar -n { <關鍵詞> [,...] | ALL }
網路統計資訊
關鍵詞可以是:
DEV
網路卡EDEV
網路卡 (錯誤)NFS
NFS 客戶端NFSD
NFS 伺服器SOCK
Sockets (套接字) (v4)IP
IP 流 (v4)EIP
IP 流 (v4) (錯誤)ICMP
ICMP 流 (v4)EICMP
ICMP 流 (v4) (錯誤)TCP
TCP 流 (v4)ETCP
TCP 流 (v4) (錯誤)UDP
UDP 流 (v4)SOCK6
Sockets (套接字) (v6)IP6
IP 流 (v6)EIP6
IP 流 (v6) (錯誤)ICMP6
ICMP 流 (v6)EICMP6
ICMP 流 (v6) (錯誤)UDP6
UDP 流 (v6)
$ sar -n DEV 2 2
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
21時28分33秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
21時28分35秒 ens37 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分35秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分35秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分35秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分35秒 ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分35秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
21時28分37秒 ens37 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分37秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分37秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分37秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21時28分37秒 ens33 0.50 0.50 0.03 0.33 0.00 0.00 0.00
平均時間: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均時間: ens37 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: ens33 0.25 0.25 0.01 0.16 0.00 0.00 0.00
程序佇列長度和平均負載狀態監控
$ sar -q
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
20時00分16秒 LINUX RESTART
20時10分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
20時20分01秒 0 178 0.00 0.01 0.04 0
20時30分01秒 0 179 0.00 0.01 0.05 0
20時40分01秒 0 178 0.00 0.01 0.05 0
20時50分01秒 0 178 0.04 0.03 0.05 0
21時00分01秒 0 177 0.00 0.01 0.05 0
21時10分01秒 0 177 0.00 0.01 0.05 0
21時20分01秒 0 177 0.00 0.01 0.05 0
21時30分01秒 0 177 0.00 0.01 0.05 0
平均時間: 0 178 0.01 0.01 0.05 0
runq-sz
執行佇列的長度(等待執行的程序數,等待cpu排程的任務數)plist-sz
程序列表中程序(processes)和執行緒(threads)的數量ldavg-1
最後1分鐘的系統平均負載(System load average)ldavg-5
過去5分鐘的系統平均負載ldavg-15
過去15分鐘的系統平均負載blocked
表示等待I/O完成而被阻塞的任務總數,不為0則需要留意I/O是否存在效能瓶頸
iostat命令
iostat是I/O statistics(輸入/輸出統計)的縮寫
主要的功能是對系統的磁碟I/O操作進行監視
它的輸出主要顯示磁碟讀寫操作的統計資訊,同時也會給出CPU使用情況
iostat使用語法如下:
iostat [ -c | -d ] [ -k ] [ -t ] [ -x [ device ] ] [ interval [ count ] ]
各個選項及引數含義如下:
-
-c:顯示CPU的使用情況。
-
-d:顯示磁碟的使用情況。
-
-k/-m:每秒以k bytes/m bytes為單位顯示資料。
-
-t:列印出統計資訊開始執行的時間。
-
-p:顯示每塊磁碟的分割槽情況
-
-N:顯示磁碟陣列(LVM)資訊
-
-x device:指定要統計的磁碟裝置名稱,預設為所有的磁碟裝置。
-
interval:指定兩次統計間隔的時間;
-
count:按照“interval”指定的時間間隔統計的次數。
$ iostat #從開機到當前時刻的統計資訊
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.11 0.00 0.25 0.01 0.00 99.63
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.01 0.56 0.00 1038 0
sda 6.60 136.46 57.60 250973 105947
輸出的說明
- 第一行:分別是版本核心資訊 日期 架構 cpu個數
- avg-cpu部分:
%user
:使用者佔用cpu的時間百分比%nice
:有優先順序的程序佔用cpu的時間百分比%system
:系統佔用cpu時間百分比%iowait
:等待IO時間的時間百分比%steal
:管理程式維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比%idle
:CPU空閒時間百分比
當然了,iostat命令的重點不是用來看CPU的,重點是用來監測磁碟效能的。
- Device部分
tps
: 每秒程序下發的IO讀、寫請求數量kB_read/s
: 每秒從磁碟讀入的資料量,單位為K。kB_wrtn/s
: 每秒從磁碟寫入的資料量,單位為K。kB_read
: 讀取的資料總量,單位為K。KB_wrtn
: 寫入的資料總量,單位為K。
$ iostat -x -k -d 1 2 # 每隔1S輸出磁碟IO的詳細詳細,總共取樣2次
Linux 3.10.0-1160.62.1.el7.x86_64 (Centos7.9-0.5) 2022年05月14日 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
scd0 0.00 0.00 0.01 0.00 0.58 0.00 90.26 0.00 1.13 1.13 0.00 0.96 0.00
sda 0.02 0.04 6.25 0.51 140.25 58.74 58.89 0.00 0.30 0.25 0.84 0.20 0.13
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
輸出說明
-
rrqm/s
: 每秒對該裝置的讀請求被合併次數,檔案系統會對讀取同塊(block)的請求進行合併 -
wrqm/s
: 每秒對該裝置的寫請求被合併次數 -
r/s
: 每秒完成的讀次數 -
w/s
: 每秒完成的寫次數 -
rkB/s
: 每秒讀資料量(kB為單位) -
wkB/s
: 每秒寫資料量(kB為單位) -
avgrq-sz
:平均每次裝置I/O操作的資料大小(扇區數為單位) -
avgqu-sz
: 平均I/O佇列長度 -
await
:平均每次裝置I/O操作的等待時間 (毫秒),一般地,系統I/O響應時間應該低於5ms,如果大於 10ms就比較大了 -
r_await
: 每個讀操作平均所需的時間;不僅包括硬碟裝置讀操作的時間,還包括了在kernel佇列中等待的時間 -
w_await
: 每個寫操作平均所需的時間;不僅包括硬碟裝置寫操作的時間,還包括了在kernel佇列中等待的時間 單位毫秒 -
svctm
: 平均每次IO請求的處理時間(毫秒為單位) -
%util
: 一秒中有百分之多少的時間用於I/O操作,即被IO消耗的CPU百分比,一般地,如果該引數是100%表示裝置已經接近滿負荷執行了
mpstat命令
mpstat
是一個在 Linux 系統中用於實時監控多處理器系統(包括單核和多核系統)CPU使用情況的命令列工具。
基本語法
mpstat [選項] [間隔時間 [取樣次數]
常用選項
-P ALL
或-P <cpu編號>
:顯示所有CPU或指定編號CPU的統計資訊。-u
:顯示CPU利用率統計資料,包括使用者、系統、空閒、等待I/O等時間百分比。-p
:顯示每個CPU核心的中斷統計資訊。-I { SUM | CPU | SCPU | ALL }
:顯示詳細的CPU中斷統計。
顯示CPU的總體情況
$ mpstat
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時26分17秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
17時26分17秒 all 0.05 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 99.86
顯示當前所有CPU的CPU利用率
$ mpstat -P ALL
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時29分20秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
17時29分20秒 all 0.05 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 99.87
17時29分20秒 0 0.07 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 99.84
17時29分20秒 1 0.06 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 99.86
17時29分20秒 2 0.04 0.00 0.10 0.00 0.00 0.01 0.00 0.00 0.00 99.85
17時29分20秒 3 0.05 0.00 0.07 0.00 0.00 0.01 0.00 0.00 0.00 99.87
17時29分20秒 4 0.04 0.00 0.07 0.00 0.00 0.00 0.00 0.00 0.00 99.89
17時29分20秒 5 0.04 0.00 0.07 0.00 0.00 0.00 0.00 0.00 0.00 99.88
17時29分20秒 6 0.05 0.00 0.09 0.00 0.00 0.00 0.00 0.00 0.00 99.86
17時29分20秒 7 0.05 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 99.87
顯示當前每個CPU的CPU利用率
mpstat -I SCPU
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時31分06秒 CPU HI/s TIMER/s NET_TX/s NET_RX/s BLOCK/s BLOCK_IOPOLL/s TASKLET/s SCHED/s HRTIMER/s RCU/s
17時31分06秒 0 0.00 11.88 0.00 0.51 1.08 0.00 0.01 8.16 0.00 5.63
17時31分06秒 1 0.00 8.23 0.00 0.00 0.08 0.00 0.00 4.24 0.00 4.68
17時31分06秒 2 0.00 11.00 0.00 0.81 0.13 0.00 0.00 8.66 0.00 3.60
17時31分06秒 3 0.00 12.39 0.00 0.82 0.16 0.00 0.00 8.20 0.00 4.52
17時31分06秒 4 0.00 10.04 0.20 1.34 0.23 0.00 0.00 8.66 0.00 3.15
17時31分06秒 5 0.00 8.58 0.00 0.01 0.30 0.00 0.00 7.27 0.00 2.56
17時31分06秒 6 0.00 13.89 0.00 0.39 0.24 0.00 0.13 10.44 0.00 4.70
17時31分06秒 7 0.00 15.57 0.00 0.39 0.25 0.00 0.00 11.86 0.00 5.01
每隔5秒輸出一次CPU狀態,總共輸出3次
mpstat 5 3
顯示特定CPU(例如CPU0)的狀態
mpstat -P 0
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時32分17秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
17時32分17秒 0 0.07 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.00 99.84
pidstat命令
pidstat是程序分析的終極利器,利用它可以分析程序(包括程序中所有每個執行緒)的各種資訊:
cpu使用(預設就是cpu, -u 也是cpu), 記憶體使用(-r 包括page fault),IO情況(-d),程序切換(-w),
pidstat 可以使用 -p xxx 指定程序pid,單獨分析一個程序及其所有執行緒;也可以是所有程序 -p ALL,或者是所有活動程序(預設是所有活動程序)
基本語法
pidstat [選項] [間隔時間] [取樣次數]
選項
-d
顯示各程序磁碟IO統計資訊。-h
時間會以時間戳的方式顯示-l
會完整的顯示各程序-r
顯示各程序記憶體使用情況-s
顯示程序的記憶體堆疊使用情況-t
以樹的形式展示各程序-U [ <username> ]
只展示該使用者的相關程序-u
展示每個程序的CPU利用率 預設選項-w
顯示程序的上下文切換(Context Switches)統計資訊-C <command>
只顯示相關程序名稱的程序-p <pid>
顯示pid對應的程序
檢視所有活動程序的cpu資訊
$ pidstat
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時35分49秒 UID PID %usr %system %guest %CPU CPU Command
17時35分49秒 0 1 0.00 0.02 0.00 0.02 2 systemd
17時35分49秒 0 2 0.00 0.00 0.00 0.00 6 kthreadd
17時35分49秒 0 6 0.00 0.00 0.00 0.00 0 ksoftirqd/0
17時35分49秒 0 7 0.00 0.00 0.00 0.00 0 migration/0
17時35分49秒 0 9 0.00 0.02 0.00 0.02 6 rcu_sched
17時35分49秒 0 11 0.00 0.00 0.00 0.00 0 watchdog/0
17時35分49秒 0 12 0.00 0.00 0.00 0.00 1 watchdog/1
17時35分49秒 0 13 0.00 0.00 0.00 0.00 1 migration/1
17時35分49秒 0 17 0.00 0.00 0.00 0.00 2 watchdog/2
17時35分49秒 0 18 0.00 0.00 0.00 0.00 2 migration/2
$ pidstat -h
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
# Time UID PID %usr %system %guest %CPU CPU Command
1710496372 0 1 0.00 0.02 0.00 0.02 2 systemd
1710496372 0 2 0.00 0.00 0.00 0.00 6 kthreadd
1710496372 0 6 0.00 0.00 0.00 0.00 0 ksoftirqd/0
1710496372 0 7 0.00 0.00 0.00 0.00 0 migration/0
1710496372 0 9 0.00 0.02 0.00 0.02 7 rcu_sched
1710496372 0 11 0.00 0.00 0.00 0.00 0 watchdog/0
1710496372 0 12 0.00 0.00 0.00 0.00 1 watchdog/1
1710496372 0 13 0.00 0.00 0.00 0.00 1 migration/1
顯示各程序的磁碟IO情況
$ pidstat -d
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時54分21秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
17時54分21秒 0 1 13.99 0.02 0.00 systemd
17時54分21秒 0 78 0.00 0.00 0.00 kworker/u256:1
17時54分21秒 0 306 0.00 0.00 0.00 kworker/u256:2
17時54分21秒 0 440 0.12 0.00 0.00 systemd-journal
17時54分21秒 0 460 0.01 0.00 0.00 lvmetad
17時54分21秒 0 480 2.06 0.00 0.00 systemd-udevd
17時54分21秒 0 611 0.01 0.00 0.00 xfsaild/sda5
17時54分21秒 0 648 0.01 0.04 0.00 auditd
17時54分21秒 0 650 0.01 0.00 0.00 audispd
完整顯示各程序名稱
$ pidstat -l
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時55分08秒 UID PID %usr %system %guest %CPU CPU Command
17時55分08秒 0 1 0.00 0.02 0.00 0.02 2 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
17時55分08秒 0 314 0.00 0.00 0.00 0.00 0 irq/16-vmwgfx
17時55分08秒 0 354 0.00 0.07 0.00 0.07 3 xfsaild/sda2
17時55分08秒 0 440 0.00 0.00 0.00 0.00 5 /usr/lib/systemd/systemd-journald
17時55分08秒 0 458 0.00 0.00 0.00 0.00 7 kworker/7:2
17時55分08秒 0 480 0.01 0.00 0.00 0.01 0 /usr/lib/systemd/systemd-udevd
17時55分08秒 0 575 0.00 0.07 0.00 0.07 2 kworker/2:2
17時55分08秒 0 611 0.00 0.07 0.00 0.07 7 xfsaild/sda5
17時55分08秒 0 648 0.00 0.00 0.00 0.00 6 /sbin/auditd
17時55分08秒 0 650 0.00 0.00 0.00 0.00 6 /sbin/audispd
17時55分08秒 0 652 0.00 0.00 0.00 0.00 7 /usr/sbin/sedispatch
17時55分08秒 32 678 0.00 0.00 0.00 0.00 6 /sbin/rpcbind -w
17時55分08秒 0 681 0.00 0.00 0.00 0.00 5 /usr/sbin/gssproxy -D
17時55分08秒 0 688 0.00 0.00 0.00 0.00 7 /usr/sbin/ModemManager
17時55分08秒 0 694 0.00 0.00 0.00 0.01 1 /usr/sbin/irqbalance --foreground
17時55分08秒 0 697 0.00 0.00 0.00 0.00 0 /usr/sbin/smartd -n -q never
顯示各程序記憶體使用情況
$ pidstat -r
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時56分24秒 UID PID minflt/s majflt/s VSZ RSS %MEM Command
17時56分24秒 0 1 2.21 0.01 191648 4628 0.06 systemd
17時56分24秒 0 440 0.60 0.00 39160 4200 0.05 systemd-journal
17時56分24秒 0 460 0.06 0.00 116644 1272 0.02 lvmetad
17時56分24秒 0 480 0.36 0.00 46284 2612 0.03 systemd-udevd
17時56分24秒 0 648 0.02 0.00 55532 860 0.01 auditd
17時56分24秒 0 650 0.03 0.00 84556 920 0.01 audispd
17時56分24秒 0 652 0.05 0.00 55620 1432 0.02 sedispatch
17時56分24秒 32 678 0.02 0.00 69256 1008 0.01 rpcbind
17時56分24秒 0 681 0.04 0.00 201428 1276 0.02 gssproxy
17時56分24秒 0 688 0.18 0.01 430628 7544 0.09 ModemManager
17時56分24秒 0 694 0.29 0.00 21692 1328 0.02 irqbalance
17時56分24秒 0 697 0.11 0.00 52852 2816 0.03 smartd
17時56分24秒 0 698 0.10 0.00 26384 1776 0.02 systemd-logind
17時56分24秒 0 708 0.11 0.00 90668 3236 0.04 rngd
只顯示指定使用者的相關程序
$ pidstat -U chrony
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時57分37秒 USER PID %usr %system %guest %CPU CPU Command
17時57分37秒 chrony 734 0.00 0.00 0.00 0.00 4 chronyd
只顯示匹配到名稱的程序
$ pidstat -C ssh
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時58分43秒 UID PID %usr %system %guest %CPU CPU Command
17時58分43秒 0 2964 0.00 0.01 0.00 0.01 4 sshd
17時58分43秒 0 2968 0.00 0.00 0.00 0.00 5 sshd
17時58分43秒 0 3260 0.00 0.00 0.00 0.00 4 sshd
17時58分43秒 0 3264 0.00 0.00 0.00 0.00 4 sshd
根據PID顯示
pidstat -p 2964
Linux 3.10.0-1160.92.1.el7.x86_64 (centos7912) 2024年03月15日 _x86_64_ (8 CPU)
17時59分34秒 UID PID %usr %system %guest %CPU CPU Command
17時59分34秒 0 2964 0.00 0.01 0.00 0.01 4 sshd
vmstat命令
vmstat是Virtual Meomory Statistics(虛擬記憶體統計)的縮寫
可以對作業系統的記憶體資訊、程序狀態、CPU活動等進行監視
vmstat使用語法如下:
vmstat [-V] [-n] [delay [count]]
各個選項及引數含義如下:
-
-a:顯示活躍和非活躍記憶體
-
-f:顯示從系統啟動至今的fork數量。
-
-V:表示列印出版本資訊,是可選引數。
-
-n:表示在週期性迴圈輸出時,輸出的頭部資訊僅顯示一次。
-
-d:顯示磁碟相關統計資訊。
-
delay:表示兩次輸出之間的間隔時間。
-
count:表示按照“delay”指定的時間間隔統計的次數。預設為1。
例如:
vmstat 3
表示每3秒鐘更新一次輸出資訊,迴圈輸出,按ctrl+c停止輸出。
vmstat 3 5
表示每3秒更新一次輸出資訊,統計5次後停止輸出。
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1662312 2104 169148 0 0 300 32 117 250 0 1 98 0 0
$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1662156 2104 169188 0 0 278 30 112 235 0 1 99 0 0
0 0 0 1662156 2104 169188 0 0 0 0 103 123 0 0 100 0 0
0 0 0 1662156 2104 169188 0 0 0 0 105 128 0 0 100 0 0
0 0 0 1662156 2104 169188 0 0 0 0 93 111 0 0 100 0 0
0 0 0 1662156 2104 169188 0 0 0 0 94 109 0 0 100 0 0
各欄位說明
Procs(程序):
- r: 執行佇列中程序數量
- b: 等待IO的程序數量
Memory(記憶體):
- swpd: 使用虛擬記憶體大小
- free: 可用記憶體大小
- buff: 用作緩衝的記憶體大小
- cache: 用作快取的記憶體大小
Swap(虛擬記憶體):
- si(換⼊):每秒從SWAP(交換分割槽)讀⼊到RAM(swap in)的⼤⼩,單位是KB
- so(換出):每秒從RAM寫出到SWAP(swap out)的大小,單位是KB
IO:(現在的Linux版本塊的大小為1024bytes)
- bi: 每秒從檔案系統或SWAP讀⼊到RAM(blocks in)的塊數,block(1KB磁碟塊)為單位
- bo: 每秒從RAM寫出到檔案系統或SWAP(blocks out)的塊數,block(1KB磁碟塊)為單位
system(系統):
- in: 每秒中斷數,包括時鐘中斷。
- cs: 系統每秒上下文切換數。
CPU(以百分比表示):
- us: 使用者佔用cpu的時間百分比(user time)
- sy: 系統佔用cpu時間百分比(system time)
- id: 空閒時間(包括IO等待時間),中央處理器的空閒時間 。以百分比表示。
- wa: 等待IO時間的時間百分比
- st:被虛擬機器偷走的cpu時間的百分比