从uptime、stress、mpstat、pidstat观察CPU密集型、IO密集型、进程密集型切换的系统性能
uptime
dyy@dyy-Lenovo-ThinkBook-14-IIL:~$ uptime10:27:10 up 7 min, 1 user, load average: 1.32, 0.99, 0.49結(jié)果分別對(duì)應(yīng):當(dāng)前時(shí)間、系統(tǒng)運(yùn)行時(shí)間、當(dāng)前用戶數(shù)目、過(guò)去 1 分鐘、5 分鐘、15 分鐘的平均負(fù)載(Load
Average)
平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù),和 CPU使用率沒(méi)有直接關(guān)系。
可運(yùn)行狀態(tài)進(jìn)程:正在使用CPU或者正在等待CPU的進(jìn)程;即ps命令看到的,處于R狀態(tài)的進(jìn)程
不可中斷狀態(tài)進(jìn)程:正處于內(nèi)核態(tài)關(guān)鍵流程中的進(jìn)程,并且這些流程是不可打斷的,比如等待硬件設(shè)備的I/O響應(yīng),即ps命令中看到的D狀態(tài)的進(jìn)程。
不可中斷狀態(tài)實(shí)際上是系統(tǒng)對(duì)進(jìn)程和硬件設(shè)備的一種保護(hù)機(jī)制。
下面語(yǔ)句可以得到CPU個(gè)數(shù),一般來(lái)說(shuō),平均負(fù)載大于CPU的0.7倍時(shí)就需要注意了,大于CPU個(gè)數(shù)的話就會(huì)出現(xiàn)過(guò)載。
通過(guò)對(duì)于平均負(fù)載的定義可以看出,它不僅包括了正在使用CPU的進(jìn)程,還包括等待CPU和等待IO的進(jìn)程。
CPU使用率與平均負(fù)載的關(guān)系:
CPU密集型進(jìn)程,使用大量CPU會(huì)導(dǎo)致平均負(fù)載升高,兩者一致。
I/O密集型進(jìn)程,等待I/O也會(huì)導(dǎo)致平均負(fù)載升高,但CPU使用率不一定很高。
大量等待CPU的進(jìn)程調(diào)度也會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)的CPU使用率也會(huì)比較高。
接下來(lái)是實(shí)測(cè):
CPU 密集型進(jìn)程
stress 是一個(gè) Linux 系統(tǒng)壓力測(cè)試工具,我們?cè)?strong>終端1運(yùn)行該工具。
在終端2,不斷運(yùn)行uptime,可以發(fā)現(xiàn)平均負(fù)載在不斷上升。
mpstat 是一個(gè)常用的多核 CPU 性能分析工具,用來(lái)實(shí)時(shí)查看每個(gè) CPU 的性能指標(biāo),以
及所有 CPU 的平均指標(biāo),我們?cè)?strong>終端3運(yùn)行它。可以發(fā)現(xiàn)有一個(gè)核的使用率為100%,但是iowait為0.
通過(guò)運(yùn)行# pidstat -u 5 1,可以看到是運(yùn)行stress的進(jìn)程占用率為100%
IO密集型進(jìn)程
stress 命令,但這次模擬 I/O 壓力,即不停地執(zhí)行 sync,下面是顯示效果,可以發(fā)現(xiàn)iowait很高,導(dǎo)致了平均負(fù)載很高。
大量進(jìn)程場(chǎng)景
由于機(jī)子有8個(gè)核,我開(kāi)12個(gè)進(jìn)程用作運(yùn)行stress,這樣CPU處于過(guò)載狀態(tài),10.92明顯是比8大的,再用pidstat可以看出
個(gè)進(jìn)程等待 CPU 的時(shí)間(也就是代碼塊中的%wait 列)高達(dá) 60~75%,這里就是上圖的倒數(shù)第二列顯示。
總結(jié)
以上是生活随笔為你收集整理的从uptime、stress、mpstat、pidstat观察CPU密集型、IO密集型、进程密集型切换的系统性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开发小程序要多少钱啊?
- 下一篇: CPU上下文切换(系统调用、进程上下文、