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值
[轉載]Linux 系統負載查看
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
神奇高效的Linux命令行
qq5c6f4fa42f069
2019-02-24 12:58:23
Linux核心技能与应用
wy53780
2020-04-23 14:02:05
Python與家國天下
豌豆花下貓
2019-02-24 22:22:40
linux上安裝Docker(非常簡單的安裝方法)
幸運券發放
2019-02-24 19:38:01
2019年Java面試-併發容器篇
王知無
2019-02-24 15:12:46
淺淡個人學習嵌入式Linux過程
wx5c317e5b736d2
2019-02-24 13:31:30
DHCP服務原理與搭建(Linux系統+路由器,二選一方案)
wx5c7174443c6f9
2019-02-24 13:23:18
Redis安裝與配置
劉遄
2019-02-24 13:12:51
Linux查看CPU和內存使用情況
wbzjacky
2019-02-24 13:12:37
相關Linux安全方面的知識點
slqbj
2019-02-24 13:02:39
忘記了Linux密碼,使用GRUB重新設置
slqbj
2019-02-24 13:02:39
Oracle11g 基於linux 6.3下安裝
love壁虎
2019-02-24 12:55:06
Oracle基於Linux 7下的安裝
love壁虎
2019-02-24 12:55:05