CPU的基本信息來自於文件"/proc/stat",所以對該文件的CPU部分進行簡單的說明,只截取了其中的三行
cpu 754248101 201023 833006927 34020625757 9582415 41335 57475553 0 0
cpu0 25673365 26490 45242705 481091169 1905819 0 89737 0 0
cpu1 11349582 4034 19951827 522625729 235574 0 64068 0 0
cpu:表示總的cpu信息,cpu0、cpu1表示單個cpu的信息
cpu_user:用戶態的時間
cpu_nice:用戶態的低優先級(nice)時間,cpu_nice和cpu_user都是屬於用戶態的
cpu_sys:系統態時間
cpu_idle:空閒時間
cpu_iowait:當CPU空閒的時候有IO請求的時間
cpu_hardirq:硬中斷時間
cpu_softirq:軟中斷時間,cpu_softirq、cpu_hardirq和cpu_sys都是屬於系統態的
//下面這三個是與虛擬機有關的,如果不存在虛擬機,應該都爲0,由於我的環境沒有虛擬機,所以對這幾個參數沒有詳細去了解
cpu_steal:這個的意思好像是虛擬的處理器需要等待實際的cpu的延遲時間,當存在多個虛擬機時,可能要花一定的時間等待實際的cpu運行其他的虛擬機(該指標不是太清楚)
cpu_guest:cpu運行虛擬處理器花費的時間
cpu_guest_nice:cpu運行低優先級(nice)的guest花費的時間
下面是mpstat的簡單的打印信息,分析這些域的計算方法,這些域的大致方法是通過兩次讀取"/proc/stat",計算兩次的差值
CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
總的時間爲tot_jiffies = cpu_user + cpu_nice + cpu_sys + cpu_idle + cpu_iowait + cpu_hardirq + cpu_steal + cpu_softirq;//這裏沒有計算cpu_guest/cpu_guest_nice是因爲cpu_user/cpu_nice包含了他們
%usr:兩次讀取的cpu_user的差值除以兩次讀取的tot_jiffies的差值
%nice:兩次讀取的cpu_nice的差值除以兩次讀取的tot_jiffies的差值
%sys:兩次讀取的cpu_sys的差值除以兩次讀取的tot_jiffies的差值,該指標有時候會將cpu_softirq和cpu_hardirq都計算進來
%iowait:兩次讀取的cpu_iowait的差值除以兩次讀取的tot_jiffies的差值
%irq:兩次讀取的cpu_hardirq的差值除以兩次讀取的tot_jiffies的差值
%soft:兩次讀取的cpu_softirq的差值除以兩次讀取的tot_jiffies的差值
%steal:兩次讀取的cpu_steal的差值除以兩次讀取的tot_jiffies的差值
%guest:兩次讀取的cpu_guest的差值除以兩次讀取的tot_jiffies的差值
%idle:兩次讀取的cpu_idle的差值除以兩次讀取的tot_jiffies的差值
在統計cpu信息時,還有一個常統計的信息是中斷總數intr,該信息也在/proc/stat中,只截取了第一個值,表示所有cpu的總的中斷數
intr 289854255844
該值得打印信息是使用mpstat -I SUM,
14時19分53秒 CPU intr/s
14時19分53秒 all 51507.13
intr/s:兩次讀取的intr的差值除以兩次讀取的時間間隔。
其他的一些說明:
cpu_user和cpu_nice都是處於用戶態的時間,cpu_sys和cpu_hardirq、cpu_softirq都是處於系統態的時間
iowait:Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
關於iowait,根據vmstat的man手冊,可以看到,該指標指的是當cpu空閒的時候存在io請求的時間,所以如果該指標如果比較高,即不能說明cpu不能工作,也不能說明I/O有瓶頸,該指標如果升高很難說明什麼問題,應該綜合查看當前的io情況和cpu情況,通過await和aqu_sz等指標確定是否存在I/O瓶頸問題。