一.概述概述
比如一秒內有100個cpu時間片,這個cpu時間片就是cpu工作的最小單位。那么這100個cpu時間片在不同的區域和目的進行操作使用,就代表這個區域所占用的cpu時間比。也就是這里得出的cpu時間百分比。
如下為TOP命令看到的信息,每個參數將表示cpu時間片被占用的分布情況,如下所有相加為100%。
如下,%Cpu(s)計算為所有,多少個核心都是100%
顯示的進程的%CPU為單個核心,占滿一個核心為100%,2個就是200%
二.詳解
us和sy
us 用戶空間占用CPU百分比
sy 內核空間占用CPU百分比
用戶 CPU 使用率,包括用戶態 CPU使用率(user)和低優先級用戶態 CPU使用率(nice),表示 CPU 在用戶態運行運行的時間百分比用戶 CPU 使用率高,通常說明有應用程序比較繁忙。
系統 CPU 使用率,表示 CPU 在內核態運行時間百分比(不包括中斷)。系統 CPU 使用率高,說明內核比較繁忙。
4G的進程地址空間(內存)被人為的分為兩個部分--用戶空間與內核空間。用戶空間從0到3G(0xc0000000),內核空間占據3G到4G。用戶進程通常情況下只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。例外情況只有用戶進程進行系統調用(代表用戶進程在內核態執行)等時刻可以訪問到內核空間。
所以內核的操作占用內核空間,進程的操作占用進程空間
用戶空間對應進程,所以每當進程切換,用戶空間就會跟着變化;而內核空間是由內核負責映射,它並不會跟着進程變化,是固定的。內核空間地址有自己對應的頁表,用戶進程各自有不同的頁表。
每個進程的用戶空間都是完全獨立、互不相干的。
ni
用戶進程空間內,改變過優先級的進程占用CPU百分比
進程都有優先級的,如果調節優先級,需要耗費cpu的時間段的,那就消耗這個ni
如果ni很高,那就是進程可能頻繁調換優先級(當前理解)
id
剩下的id就是除了id以為占用cpu時間片的空閑部分,相當於空間cpu的百分比。
wa
wa指的是CPU等待磁盤寫入完成的時間,就是說前提是要進行IO操作。
在進行IO操作的時候,如果程序是阻塞的,他cpu會等待數據寫入磁盤才能完成寫操作。所以這個時候cpu等待的時間就是wa。
舉例:
使用cp復制,如果文件夾中有多個文件,他每復制一次,cpu就指揮文件復制,但是硬盤讀寫的時候,cpu是要等待的,這時候cpu不動作只是等待。
所以如果一台機器看到wa特別高,那么一般說明是磁盤IO出現問題,可以使用iostat等命令繼續進行詳細分析。
hi和si
如果程序沒有問題,那是沒有hi和si的。當鍵盤打字,cpu就要去立即處理這個東西,那就是中斷,意味着中斷當前操作來處理需要立即處理的東西。
軟中斷和硬中斷理論一樣,但是軟件的,具體看詳細說明
st
st的解釋是實時,但是與虛擬化有關
比如centos上搞kvm(虛擬機,類似win的vmver),那在本機查詢st很高
當前理解為,為虛擬機提供的cpu時間片占用數。比如開啟2個虛擬機,那虛擬機用的cpu還是由真機提供的,這里應該是應用於虛擬化的數量。
查看每一個cpu的狀態mpstat
mpstat -P ALL
irq: 硬件中斷CPU用量;
sofr: 軟件中斷CPU用量;
iowait:就是上面說的wa
steal: 耗費在服務其他租戶的時間(不懂);
guest: 花在訪客虛擬機的時間(不懂);
三.總結
用戶 CPU 和 Nice CPU 高,說明用戶態進程占用了較多的 CPU,所以應該着重排查進程的性能問題
系統 CPU 高,說明內核態占用了較多的 CPU所以應該着重排查內核線程或者系統調用的性能問題
若 %iowait 的值過高,表示硬盤存在I/O瓶頸;
若 %idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量;
若 %idle 的值持續低於1,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU;