CPU性能--平均負(fù)載

平均負(fù)載

  • 單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)(R)不可中斷狀態(tài)(D)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù),和cpu沒有直接關(guān)系。

  • 那么進(jìn)程常見狀態(tài)解釋和代號如下:

$ man ps
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:
               D    uninterruptible sleep (usually IO)
               R    running or runnable (on run queue) )
               S    interruptible sleep (waiting for an event to complete)
               T    stopped by job control signal
               t    stopped by debugger during the tracing
               W    paging (not valid since the 2.6.xx kernel)
               X    dead (should never be seen)
               Z    defunct ("zombie") process, terminated but not reaped by its parent
  • 可運(yùn)行狀態(tài)進(jìn)程:正在使用或者等待cpu的進(jìn)程。ps命令看到的處于R狀態(tài)(Running or Runnable)的進(jìn)程。

  • 不可中斷狀態(tài)進(jìn)程:處于和IO訪問狀態(tài),并且這些流程是不可打斷的。比如常見的是等待硬件設(shè)備的/IO響應(yīng)。ps命令看到的D狀態(tài)(Uniterruptible Sleep 也稱Disk Sleep)的進(jìn)程。

    • 不可中斷狀態(tài)實(shí)際上是對進(jìn)程和硬件的一種保護(hù)機(jī)制。
    • 比如:當(dāng)一個(gè)進(jìn)程向磁盤寫數(shù)據(jù)時(shí),為了保證數(shù)據(jù)一致性,在得到磁盤回復(fù)之前,它是不能被其它進(jìn)程中斷打斷的,這個(gè)時(shí)候進(jìn)程處于不可中斷狀態(tài)。
  • 查看系統(tǒng)負(fù)載情況

# 周期性查看系統(tǒng)負(fù)載信息,并顯示變化的部分
$ watch -d uptime
 當(dāng)前時(shí)間  系統(tǒng)運(yùn)行時(shí)間     正在登陸的用戶 1分鐘、5分鐘、15分鐘的平均負(fù)載
 07:49:31 up 1 day,  7:59,  1 user,  load average: 0.00, 0.01, 0.05

CPU使用率

  • 單位時(shí)間內(nèi)CPU繁忙情況的統(tǒng)計(jì),和平均負(fù)載不一定完全對應(yīng)。

平均負(fù)載高產(chǎn)生原因

  • CPU密集型進(jìn)程,使用大量CPU會(huì)導(dǎo)致平均負(fù)載高,此時(shí)cpu使用率也高。
  • I/O密集型進(jìn)程,等待I/O導(dǎo)致負(fù)載升高,但CPU使用率不一定高。
  • 大量等待CPU的進(jìn)程調(diào)度也會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)CPU使用率也會(huì)比較高。
# 查看系統(tǒng)有幾個(gè)cpu
$ grep 'model name' /proc/cpuinfo | wc -l
40

平均負(fù)載多少合理

  • 平均負(fù)載理想情況是等于CPU個(gè)數(shù)。
  • 一般平均負(fù)載高于CPU數(shù)量70%的時(shí)候,應(yīng)該分析。(不是絕對)
  • 負(fù)載變高會(huì)導(dǎo)致進(jìn)程響應(yīng)變慢,進(jìn)而影響服務(wù)正常功能。

平均負(fù)載案例分析

  • 壓力測試工具:stress,用來模擬進(jìn)程平均負(fù)載身高情況
  • 性能分析工具:sysstat,用來監(jiān)控分析系統(tǒng)性能,這個(gè)包包含了mpstat、pidstat兩個(gè)命令
    • mpstat: 用來查看每個(gè)cpu性能指標(biāo),以及所有cpu平均指標(biāo)。
    • pidstat: 實(shí)時(shí)查看進(jìn)程的cpu、內(nèi)存、I/O以及上下文切換等性能指標(biāo)。
# 安裝
$ sudo yum install sysstat  stress

查看應(yīng)用是CPU密集型還是IO密集型

  • 1.先查看當(dāng)前系統(tǒng)負(fù)載uptime是否高
$ watch -d uptime
  • 2.查看負(fù)載升高的原因?
    cpu密集(%usr)、io密集(%iowait,%system)、大量等待cpu進(jìn)程調(diào)度(負(fù)載明顯大于cpu數(shù))
每隔5秒查看每個(gè)cpu的指標(biāo),以及整體cpu平均指標(biāo)
$ mpstat -P ALL 5 
  • 3.查看哪個(gè)應(yīng)用造成了負(fù)載升高,即哪個(gè)應(yīng)用,造成了上面的cpu密集(%CPU)、io密集(%system%wait)、大量等等cpu進(jìn)程調(diào)度(%wait)。(如果當(dāng)前系統(tǒng)只有一個(gè)應(yīng)用,那就很方便了,不然,有可能是多個(gè)應(yīng)用造成的)。
每隔5秒輸出一組進(jìn)程cpu使用數(shù)據(jù)(-u)
$ pidstat -u 5 1

測試環(huán)境

項(xiàng)目 說明
總的cpu核心 2
內(nèi)存 4.3G

CPU密集型應(yīng)用

# 開啟兩個(gè)worker進(jìn)行耗費(fèi)cpu計(jì)算
$ stress -c 2

$ uptime
# 負(fù)載大于cup核心數(shù),說明負(fù)載高
16:34:34 up 45 min,  2 users,  load average: 3.00, 2.71, 1.59

用htop觀察

$ htop
  • 進(jìn)程的顏色是綠色,cpu使用率高


    image.png

用mpstat

#每隔5秒查看每個(gè)cpu的指標(biāo),以及整體cpu平均指標(biāo)
$mpstat -P ALL 5
  • %usr值很高,%iowait低,說明cpu都花費(fèi)在計(jì)算上
    image.png

用pidstat

  • 查看進(jìn)程cpu使用情況
每隔5秒輸出一組進(jìn)程cpu使用數(shù)據(jù)(-u)
$ pidstat -u 5
  • 可以看到是stress引起的負(fù)載升高
  • %usr高,說明stress進(jìn)程cpu利用率高,%wait高,說明cpu不夠用在等待cpu調(diào)度上花費(fèi)了不少時(shí)間。


    看應(yīng)用的cpu使用情況
# 查看pid=1859進(jìn)程的cpu利用率情況
$pidstat -p 1859 -u 5
  • %wait為33.8%,說明等待情況有點(diǎn)久。


    image.png

IO密集型應(yīng)用

$stress -i 1

htop觀察

  • 最近1分鐘的負(fù)載為1.02,說明當(dāng)前的平均活躍進(jìn)程為1(即狀態(tài)為R或D的進(jìn)程)

  • 紅色,代表當(dāng)前使用cpu的進(jìn)程是io型

  • stress進(jìn)程的狀態(tài)為D

io密集型表現(xiàn)

mpstat

mpstat -P ALL 5
  • %idle值搞,說明cpu整體在空閑。%iowait高,說明cpu在等待io上花費(fèi)時(shí)間多。


    image.png

pidstat

  • 查看進(jìn)程io和cpu情況
pidstat -ud 5
  • stress進(jìn)程的iodelay延遲很高,但是rd,wr不高,cpu利率也底,說明在進(jìn)行sync操作,都花在了io同步上了。


    image.png

大量等待CPU調(diào)度

# 進(jìn)程數(shù)大于cpu數(shù),會(huì)導(dǎo)致cpu切換頻繁(此時(shí)系統(tǒng)cpu為4)
$stress -c 8
系統(tǒng)負(fù)載為8高于cpu個(gè)數(shù)4

mpstat

  • 每個(gè)cpu利用率都高,但是過多進(jìn)程競爭,也會(huì)導(dǎo)致cpu整體利用率高(all)


pidstat

  • 可以看到,8個(gè)進(jìn)程在競爭4個(gè)cpu,每個(gè)進(jìn)程等待cpu的時(shí)間達(dá)到50%(%wait),這些超出cpu計(jì)算能力的進(jìn)程,導(dǎo)致了負(fù)載變高


    競爭
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容