1. 程式人生 > 其它 >centos8平臺使用pidstat監控cpu/記憶體/io

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)