[轉載]Linux 系統負載查看

Sam最近在搭建一個服務器系統,需要查詢各類系統負載。之前只會用top察看cpu, memory等基本信息。對於其它信息並不瞭解。所以系統學習之。



1. CPU 佔用情況:

1.1: 首先看Process運行時佔用CPU的細節:

正如Linux Kernel中所介紹的,Process的狀態有3種:

正在被CPU處理,可被CPU處理,blocked狀態。



正在被CPU處理:顧名思義,就是process正在佔用CPU。

可被CPU處理:即runnable狀態,這就意味着它將同其他runnable狀態的process等待CPU時間。由schedule程序選擇調哪個runnable狀態的process進CPU。(這些runnable狀態的process的隊列叫做作Run Queue)

blocked狀態:process可能在等待一個I/O操作獲取的數據,或者是一個系統調用的結果



runnable processes的數目和blocked processes的數目可以表現出CPU是否很忙。



另外,很多系統工具會顯示一個值: load average。 它就是指running和runnable process的總和。

load average顯示的三個數字的時間分別爲1分鐘,五分鐘和十五分鐘 的load average數量。



1.2:CPU的上下文切換:

Linux Kernel中有個schedule() 函數。它用來從runnable 隊列中挑選出一個process進入CPU,並完成上下文切換(Context Switch)。

當系統做Context Switch時,CPU保存所有old process的context信息並獲得new process的所有context信息.Context信息包括大量的linux追蹤每個process信息,尤其是一些資源:那些process正在執行,被分配了哪些內存,它打開了那些文件,等等.切換Context會觸發大量的信息移動,這是比較高的開銷.如果可能的話儘量保持很小的 context switches.



kernel schedule() 觸發context switches.爲了保證每個process平等的共享CPU時間,kernel週期性中斷running的process,看是否有需要作context switches. 如果需要,kernel調度器會開始另外的process而不是讓當前的process繼續執行,每次的週期性中斷或者定時中斷都可能觸發context switch.每秒定時中斷的次數因不同架構和不同的kernel版本而不同(Kernel中的HZ?, Kernel中這個值通常設置爲1000) .

$cat .config |grep CONFIG_HZ

可以看到這個值設置爲多少。(通常爲1000)。 也就是每秒鐘1000次時鐘中斷。



用戶態如何察看時鐘中斷,以前Sam使用:

#cat /proc/interrupts

認爲其中中斷0 就是時鐘中斷數。可以利用間隔10秒的差值算出每秒時鐘中斷數。但現在在多核上好像不適用了。





1.3:CPU狀態信息:

us -- User CPU time
The time the CPU has spent running users' processes that are not niced.

非nice過的用戶程序所佔用的百分比。

sy -- System CPU time
The time the CPU has spent running the kernel and its processes.

kernel和系統調用所佔用的百分比。

ni -- Nice CPU time
The time the CPU has spent running users' proccess that have been niced.

被nice過的用戶程序所佔百分比。

wa -- iowait
Amount of time the CPU has been waiting for I/O to complete.

等待IO操作時所佔百分比。

hi -- Hardware IRQ
The amount of time the CPU has been servicing hardware interrupts.

處理硬件中斷所用百分比。

si -- Software Interrupts
The amount of time the CPU has been servicing software interrupts.

處理軟件中斷所用百分比。

st -- Steal Time
The amount of CPU 'stolen' from this virtual machine by the hypervisor for other tasks (such as running another vir鈥?
tual machine).



NICE以及修改process優先級: 見附錄1。





1.4:使用top查看CPU狀況:

$top -d 1 -c

top有相當強大的功能。不光可以顯示當前CPU各個狀態下的時間。還可以分別顯示多個CPU Core(按1)。以及某個process具體是運行在哪個core上。(按f,j)



如果發現CPU system部分佔用太多,可以使用OProfile 工具查看。

如果iowait很高時,則需要具體檢查IO部分,如硬盤和網卡等。



1.5: 使用vmstat查看CPU狀況:

使用top查看cpu狀態時,可以看到CPU在哪些狀態下佔用較多。以及哪些Process佔用較多CPU。

而使用vmstat查看,在CPU實用方面,則有其它信息可看。

$vmstat 1 //每隔1s 輸出一次結果

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st



CPU項目下的:us sy id wa st與top下的相似。

procs下則有幾項有新意:

r:in run queue

b:blocked for resources I/O, paging etc

如果r 的值持續較大,且連續超過CPU Core的數量,則表明CPU資源嚴重不足,有很多process在等待CPU, CPU計算能力已經成爲瓶頸。







2. 查看其它IO負載:

當使用top或者vmstat發現CPU wa時間多時。 vmstat中發現b列一直比較大的話(超過CPU Core)。則表明IO性能不佳。



IO性能,可以具體查看存儲設備和網絡設備。
















































附錄1:process優先級及其修改:

當使用top命令時。有2列顯示與process的優先級別有關:

PR:Priority.

NI:nice.

PR數值越小,process的優先級約高。

PR(new) = PR(old) + NI



指定和修改porcess優先級,可以使用:nice和renice命令。

$sudo nice -n -10 top -d 1

則看到top的NI=-10



linux nice 命令詳解

  功能說明:設置優先權。

  語  法:nice [-n <優先等級>][--help][--version][執行指令]

  補充說明:nice指令可以改變程序執行的優先權等級。

  參  數:-n<優先等級>或-<優先等級>或--adjustment=<優先等級>  設置欲執行的指令的優先權等級。等級的範圍從-20-19,其中-20最高,19最低,只有系統管理者可以設置負數的等級。



renice:

renice -10 -p 6200

將pid=6100的process NI 設置爲-10





另外:使用top,也可以修改porcess的優先級。

#top -d 1

"r"-->輸入進程PID-->輸入nice值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章