CPU負載和利用率linux
CPU 的負載和利用率是兩個不一樣的概念,可是他們均可以在top命令中查看。CPU利用率顯示的是程序在運行期間實時佔用的CPU百分比,而CPU負載顯示的是一段時間內正在使用和等待使用CPU的平均任務數。CPU利用率高,並不意味着CPU的負載大。二者之間沒有必然的關係。ios
經常使用命令介紹:nginx
* uptimeweb
首先咱們須要明白load average後面的三個數字表明什麼,他們分別表明前一分鐘,五分鐘,十五分鐘的CPU負載,通常來講較重要的指標是最後一個,由於咱們須要儘可能避免一些突發的狀況。那麼這些數字處於什麼區間是正常的呢?首先咱們須要知道,這些數字是和你的服務器的CPU核數是緊密相關的,若是你只有一個核的話,那麼數字爲1.0就表示恰好在CPU的承受範圍以內。這些數字固然是越小越好,可是理論上0.0~1.0之間都是正常範圍。根據經驗來講,若是一直在0.7上下,那麼說明你可能須要花些時間來調查;若是長期徘徊或者超過1.0,那麼你就須要進行修復啦!apache
對應的,提供查看linux下查看邏輯CPU的命令:緩存
* top服務器
top命令不只能夠查看當前系統的平均負載,還能夠查看不一樣進程對於CPU、內存等資源的使用狀況。併發
默認狀況下,top命令是以CPU使用率由高到低排序顯示進程信息的,在 top 信息界面按 K 鍵,並輸入想要終止的PID,就能夠直接殺死指定進程。
top的 -b 選項開啓批處理模式,將每次刷新所有打印到stdout
top的 -n 選項指定退出top命令前刷新多少次信息。
top命令的輸出:
第1行:與uptime相同;
第3行:當前的CPU運行狀況:
us:非nice用戶進程佔用CPU的比率
sy:內核、內核進程佔用CPU的比率;
ni:若是一些用戶進程修改過優先級,這裏顯示這些進程佔用CPU時間的比率;
id:CPU空閒比率,若是系統緩慢而這個值很高,說明系統慢的緣由不是CPU負載高;
wa:CPU等待執行I/O操做的時間比率,該指標能夠用來排查磁盤I/O的問題,一般結合wa和id判斷
hi:CPU處理硬件終端所佔時間的比率;
si:CPU處理軟件終端所佔時間的比率;
st:流逝的時間,虛擬機中的其餘任務所佔CPU時間的比率;函數
用戶進程佔比高,wa低,說明系統緩慢的緣由在於進程佔用大量CPU,一般還會伴有較低的id,說明CPU空轉時間不多。
wa低,id高,能夠排除CPU資源瓶頸的可能。
wa高,說明I/O佔用了大量的CPU時間,須要檢查交換空間的使用,交換空間位於磁盤上,性能遠低於內存,當內存耗盡開始使用交換空間時,將會給性能帶來嚴重影響,因此對於性能要求較高的服務器,通常建議關閉交換空間。另外一方面,若是內存充足,但wa很高,說明須要檢查哪一個進程佔用了大量的I/O資源。性能
* iostat
若是iowait過長,說明是磁盤瓶頸;system過長,說明是內核瓶頸。
在Device一行,能夠看到一些IO指標:
tps: 每秒I/O傳輸請求量;
Blk_read/s:每秒讀取多少KB;
Blk_wrtn/s:每秒寫多少KB;
Blk_read:一共讀了多少KB;
Blk_wrtn:一共寫了多少KB
* sar
sar命令查看CPU、內存和磁盤記錄。默認狀況下,sar命令顯示當天的統計信息,不帶參數顯示CPU統計信息,參數-r顯示收集的內存記錄,-b顯示磁盤I/O
查看當天CPU使用:
查看當天內存使用:
查看當天IO統計:
另外,可使用參數-s和-e限定查看的時間,使用參數-f查看本月內以前某一天的歷史統計信息,例如:sar -s 20:00:00 ; sar -f /var/log/sysstat/sa08
*vmstat
相比top,這個能夠看到整個機器的CPU,內存,IO的使用狀況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不同)
vmstat後面跟兩個參數,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數(能夠缺省)。
r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閒,沒什麼程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。
b 表示阻塞的進程。
swpd 虛擬內存已使用的大小,若是大於0,表示你的機器物理內存不足了,若是不是程序內存泄露的緣由,那麼你該升級內存了或者把耗內存的任務遷移到其餘機器。
free 空閒的物理內存的大小。
buff Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存。
cache cache直接用來記憶咱們打開的文件,給文件作緩衝,用空閒的一部分物理內存作緩存,提升程序執行的性能。
si 每秒從磁盤讀入虛擬內存的大小,若是這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。
so 每秒虛擬內存寫入磁盤的大小,若是這個值大於0,同上。
bi 塊設備每秒接收的塊數量,這裏的塊設備是指系統上全部的磁盤和其餘塊設備,默認塊大小是1024byte,我本機上沒什麼IO操做,因此一直是0。
bo 塊設備每秒發送的塊數量,例如咱們讀取文件,bo就要大於0。bi和bo通常都要接近0,否則就是IO過於頻繁,須要調整。
in 每秒CPU的中斷次數,包括時間中斷。
cs 每秒上下文切換次數,例如咱們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,咱們通常作性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程能夠由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,咱們的代碼就會進入內核空間,致使上下文切換,這個是很耗資源,也要儘可能避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,致使CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
us 用戶CPU時間。
sy 系統CPU時間,若是過高,表示系統調用時間長,例如是IO操做頻繁。
d 空閒 CPU時間,通常來講,id + us + sy = 100,通常我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
wt 等待IO CPU時間。
經常使用的獲取Cpu負載和性能的命令大概就總結這麼多把,還有一些是關於使用taskset綁定進程到指定CPU上的,我本身並無使用過,就不在此展開了。