一,安裝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/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,最常用的六個參數
-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)