效能分析Linux伺服器CPU利用率

2021-09-07 05:20:34 字數 3740 閱讀 5664

cpu度量

合理值:60-85%,如果在乙個多使用者系統中us+sy時間超過85%,則程序可能要花時間在執行佇列中等待,響應時間和業務吞吐量會受損害;us過大,說明有使用者程序占用很多cpu時間,需要進一步的分析其它軟硬體因素;sy過大,說明系統管理方面花了很多時間,說明該系統中某個子系統產生了瓶頸,需要進一步分析其它軟硬體因素。

很慢的響應時間(slow response time)

cpu的空閒時間為零(zero percent idle cpu)

過高的使用者占用cpu時間(high percent user cpu)

過高的系統占用cpu時間(high percent system cpu)

長時間的有很長的執行程序佇列(large run queue size sustained over time)

資料來自/proc/stat檔案

%us =(user time + nice time)/cpu時間*100%

%sy=(system time + hardirq time +softirq time)/ cpu時間*100%

%id=(idle time)/cpu時間*100%

%ni=(nice time)/cpu時間*100%

%wa=(waiting time)/cpu時間*100%

%hi=(hardirq time)/cpu時間*100%

%si=(softirq time)/cpu時間*100%

%st=(steal time)/cpu時間*100%

備註: top 命令預設情況下,是每 3 秒重新整理一次。也可以通過 top  -d 《重新整理時間間隔》 來指定重新整理頻率,如top -d 0.1 或top -d 0.01 等。top 執行時,也可以按「s 」鍵,修改時間間隔。 

iostat、sar  -q、sar –u等

hz是系統時鐘在一秒內固定發出時鐘中斷的次數。hz在編譯核心前是可以進行配置的,因此通過下述命令就可以檢視當前系統的時鐘中斷頻率:cat /boot/config-`uname -r` | grep config_hz

tick為系統時鐘每「滴答「一次的時間,其值為(1/hz)秒。也就是連續兩次時鐘中斷之間的時間間隔。

jiffies用來計算自系統啟動以來tick的次數,也就是說系統時鐘每產生一次時鐘中斷,該變數的值就增加一次。

cpu的工作時間由三部分組成:使用者態時間、系統態時間和空閒態時間。具體的組成為:

cpu時間包含user time、system time、nice time、idle time、waiting time、hardirq time、softirq time、steal time

空閒態時間==idle time

使用者態時間==user time+ nice time。

核心態時間==system time+ hardirq time+ softirq time。

user time。指cpu在使用者態執行程序的時間。

system time。指cpu在核心執行的時間。

nice time。指系統花費在調整程序優先順序上的時間。

idle time。系統處於空閒期,等待程序執行。

steal time。指當前cpu被強制(involuntary wait )等待另外虛擬的cpu處理完畢時花費的時間,此時 hypervisor 在為另乙個虛擬處理器服務。 

softirq time 、hardirq time。分別對應系統在處理軟硬中斷時候所花費的cpu時間。

執行程序佇列的長度。對於可執行狀態的程序個數的大小,這些程序在記憶體中準備就緒

程序在建立的時候除了建立程序的控制塊之外,在核心裡還建立了程序的核心棧,程序通過系統呼叫(例如fopen()或者open())進入核心後,此時處理器處於特權級最高的(0級)核心**中執行,當程序處於核心態時,執行的核心**會使用當前程序的核心棧,是指向在程序的上下文上的,

核心模式的許可權高於使用者模式的許可權。

任何程序要想占有cpu,從而真正處於執行狀態,就必須經由程序排程。程序排程機制主要涉及到排程方式、排程時機和排程策略。

1. 排程方式

linux核心的排程方式基本上採用「搶占式優先順序」方式,即當程序在使用者模式下執行時,不管是否自願,在一定條件下(如時間片用完或等待i/o),核心就可以暫時剝奪其執行而排程其它程序進入執行。但是,一旦程序切換到核心模式下執行,就不受以上限制而一直執行下去,直至又回到使用者模式之前才會發生程序排程。

linux系統中的排程策略基本上繼承了unix的以優先順序為基礎的排程。就是說,核心為系統中每個程序計算出乙個優先權,該優先權反映了乙個程序獲得cpu使用權的資格,即高優先權的程序優先得到執行。核心從程序就緒佇列中挑選乙個優先權最高的程序,為其分配乙個cpu時間片,令其投入執行。在執行過程中,當前程序的優先權隨時間遞減,這樣就實現了「負反饋」作用:經過一段時間之後,原來級別較低的程序就相對「提公升」了級別,從而有機會得到執行。當所有程序的優先權都變為0時,就重新計算一次所有程序的優先權。

2. 排程策略

linux系統針對不同類別的程序提供了三種不同的排程策略,即sched_fifo、sched_rr及sched_other。

sched_fifo適合於實時程序,它們對時間性要求比較強,而每次執行所需的時間比較短,一旦這種程序被排程開始執行後,就要一直執行到自願讓出cpu,或者被優先權更高的程序搶占其執行權為止。

sched_rr對應「時間片輪轉法」,適合於每次執行需要較長時間的實時程序。乙個執行程序分配乙個時間片(如200毫秒),當時間片用完後,cpu被另外程序搶占,而該程序被送回相同優先順序佇列的末尾。sched_other是傳統的unix排程策略,適合於互動式的分時程序。這類程序的優先權取決於兩個因素,乙個因素是程序剩餘時間配額,如果程序用完了配給的時間,則相應優先權為0;另乙個是程序的優先數nice,這是從unix系統沿襲下來的方法,優先數越小,其優先順序越高。

nice的取值範圍是19-20。使用者可以利用nice命令設定程序的nice值。但一般使用者只能設定正值,從而主動降低其優先順序;只有特權使用者才能把nice的值置為負數。程序的優先權就是以上二者之和。核心動態調整使用者態程序的優先順序。這樣,乙個程序從建立到完成任務後終止,需要經歷多次反饋迴圈。當程序再次被排程執行時,它就從上次斷點處開始繼續執行。對於實時程序,其優先權的值是(1000+設定的正值),因此,至少是1000。所以,實時程序的優先權高於其它型別程序的優先權。另外,時間配額及nice值與實時程序的優先權無關。如果系統中有實時程序處於就緒狀態,則非實時程序就不能被排程執行,直至所有實時程序都完成了,非實時程序才有機會占用cpu。

後台命令(在命令末尾有&符號,如gcc f1.c& )對應後台程序(又稱後台作業),後台程序的優先順序低於任何互動(前台)程序的優先順序。所以,只有當系統中當前不存在可執行的互動程序時,才排程後台程序執行。後台程序往往按批處理方式排程執行。

3. 排程時機

核心進行程序排程的時機有以下幾種情況:

(1)當前程序呼叫系統呼叫nanosleep( )或pause( )使自己進入睡眠狀態,主動讓出一段時間的cpu使用權;

(2)程序終止,永久地放棄對cpu的使用;

(3)在時鐘中斷處理程式執行過程中,發現當前程序連續執行的時間過長;

(4)當喚醒乙個睡眠程序時,發現被喚醒的程序比當前程序更有資格執行;

(5)乙個程序通過執行系統呼叫來改變排程策略或降低自身的優先權(如nice命令),從而引起立即排程。

4. 排程演算法

出現cpu計數器不在範圍時,不一定是由於cpu資源不夠,因為其他資源的也會引起,例如記憶體不夠時,cpu會忙記憶體管理的事,表面上可能是cpu的利用為100%

伺服器效能監控 cpu

最近伺服器load較高,後來排查是死迴圈 這可要命了,下面介紹乙個普通排查方法 top 檢視pid 負載較高的那個 當然 jps也可以 然後 定位 這個程序ip下面的執行緒耗時情況 ps mp pid o thread,tid,time 看time 可能有乙個執行緒執行時間特別長 幾十分鐘或者更長 ...

伺服器效能之CPU

有時我們會發現開發的應用在cpu核數一樣的虛擬伺服器上效能表現出較大的差異,這是為什麼呢?上次有童鞋問到我這樣乙個問題,所以我根據自己的理解給大家簡說下!cpu生產商為了提高cpu的效能,通常做法是提高cpu的時鐘頻率和增加快取容量。不過目前cpu的頻率越來越快,如果再通過提公升cpu頻率和增加快取...

伺服器磁碟效能分析

伺服器硬碟,顧名思義,就是伺服器上使用的硬碟 hard disk 如果說伺服器是網路資料的核心,那麼伺服器硬碟就是這個核心的資料倉儲,所有的軟體和使用者資料都儲存在這裡。對使用者來說,儲存在伺服器上的硬碟資料是最寶貴的,因此硬碟的可靠性是非常重要的。為了使硬碟能夠適應大資料量 超長工作時間的工作環境...