centos8平臺使用pidstat監控cpu/記憶體/io
一,安裝pidstat:
1,安裝
[root@localhost yum.repos.d]# yum install sysstat
2,檢視版本:
[root@localhost ~]# pidstat -V sysstat 版本 11.7.3 (C) Sebastien Godard (sysstat <at> orange.fr)
說明:一般會預設安裝,如未安裝則可以用上面的yum命令進行安裝
3,如果已安裝,可以檢視所屬的rpm包:
[root@yjweb ~]# whereis pidstat pidstat: /usr/bin/pidstat /usr/share/man/man1/pidstat.1.gz [root@yjweb ~]# rpm -qf /usr/bin/pidstat sysstat-11.7.3-2.el8.x86_64
說明:劉巨集締的架構森林是一個專注架構的部落格,地址:https://www.cnblogs.com/architectforest
對應的原始碼可以訪問這裡獲取: https://github.com/liuhongdi/
說明:作者:劉巨集締 郵箱: [email protected]
二,最常用的六個引數
-u:監控cpu
-r:監控記憶體
-d:監控硬碟
-w: 顯示每個程序的上下文切換情況
-t: 顯示選擇任務的執行緒的統計資訊
-p: 指定程序id
三,常用的用法舉例:
1,監控磁碟
[root@SearchCacheServer ~]# pidstat -d
2,監控cpu
[root@SearchCacheServer ~]# pidstat -u
3,監控記憶體
[root@SearchCacheServer ~]# pidstat -r
4,上下文切換
[root@SearchCacheServer ~]# pidstat -w
四,io使用情況的輸出資訊意義:
[root@SearchCacheServer ~]# pidstat -d
-
PID:程序id
-
kB_rd/s:每秒從磁碟讀取的KB
-
kB_wr/s:每秒寫入磁碟KB
-
kB_ccwr/s:任務取消的寫入磁碟的KB。當任務截斷髒的pagecache的時候會發生。
-
任務取消的寫入磁碟的kb數。在任務壓縮髒頁快取時可能發生這種情況。在這種情況下,其他任務發起的IO不會處理。
-
iodelay: 表示 I/O 的延遲(單位是時鐘週期),包括等待同步塊 I/O 和換入塊 I/O 結束的時間
任務的I/O阻塞延遲,以時鐘週期為單位。包括同步塊I/O和換入塊I/O
-
COMMAND:task的命令名
五,檢視上下文切換的輸出資訊意義:
[root@yjweb ~]$ pidstat -wt
上下文切換的輸出資訊:
cswch/s:表示每秒自願上下文切換(voluntary context switches)的次數
ncswch/s:表示每秒非自願上下文切換(non voluntary context switches)的次數
這兩個概念一定要牢牢記住,因為它們意味著不同的效能問題:
所謂自願上下文切換,是指程序無法獲取所需資源,導致的上下文切換。
比如說, I/O、記憶體等系統資源不足時,就會發生自願上下文切換。
而非自願上下文切換,則是指程序由於時間片已到等原因,被系統強制排程,進而發生的上下文切換。
比如說,大量程序都在爭搶 CPU 時,就容易發生非自願上下文切換。
觀察上下文切換的意義:
自願上下文切換變多了,說明程序都在等待資源,有可能發生了 I/O 等其他問題; 非自願上下文切換變多了,說明程序都在被強制排程,也就是都在爭搶 CPU,說明 CPU 的確成了瓶頸;
六,顯示執行緒的統計資訊 (-t)
[root@yjweb ~]# pidstat -t -p 17700
輸出資訊:
-
TGID:主執行緒的表示
-
TID:執行緒id
-
%usr:程序在使用者空間佔用cpu的百分比
-
%system:程序在核心空間佔用cpu的百分比
-
%guest:程序在虛擬機器佔用cpu的百分比
-
%CPU:程序佔用cpu的百分比
-
%wait: 程序或者執行緒等待的cpu使用率;此值過高,表示出現程序或執行緒爭搶CPU的情況
-
CPU:處理程序的cpu編號
-
Command:當前程序對應的命令
七,檢視cpu的使用情況
[root@yjweb ~]# pidstat -u -p 17700
說明:輸出內容與 -t相同,但只顯示程序的情況
八,檢視指定程序的記憶體使用情況:
[root@yjweb ~]# pidstat -r -p 17700
輸出內容:
-
PID:程序識別符號
-
Minflt/s:任務每秒發生的次要錯誤,不需要從磁碟中載入頁
任務造成的小錯誤的總數。小錯誤指的是還不需要從磁碟中載入一個記憶體頁。
-
Majflt/s:任務每秒發生的主要錯誤,需要從磁碟中載入頁
任務造成的大錯誤的總數。大錯誤指的是需要從磁碟中載入一個記憶體頁。
-
VSZ:
整個任務使用的虛擬記憶體大小,以kb為單位
-
RSS:常駐集合大小,非交換區實體記憶體,使用KB
-
任務使用的沒有被交換的實體記憶體,以kb為單位
%MEM:任務佔用的可用實體記憶體的比例
-
Command:task命令名
九,pidstat如何對輸出資料做排序?
#sort: 排序
#-k : 指定排序用哪一列,下面的例子中是第8列:%CPU
#-r : 倒序
[root@blog databak]# pidstat -u | sort -k 8 -r 02:45:17 PM UID PID %usr %system %guest %wait %CPU CPU Command 02:45:17 PM 0 30330 0.12 0.07 0.00 0.00 0.19 2 AliYunDun 02:45:17 PM 1002 17700 0.05 0.02 0.00 0.00 0.06 0 mysqld 02:45:17 PM 0 23413 0.01 0.01 0.00 0.00 0.03 3 aliyun-service 02:45:17 PM 0 8240 0.00 0.01 0.00 0.00 0.01 1 redis-server 02:45:17 PM 0 30315 0.01 0.00 0.00 0.00 0.01 1 AliYunDunUpdate 02:45:17 PM 0 404 0.00 0.00 0.00 0.00 0.00 3 xfsaild/vda1
十,檢視本地centos的版本
[root@yjweb ~]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core)