linux 性能自我學習 ———— 理解平均負載 [一]
前言
linux 系統上性能調查的自我學習。
正文
什么是平均負載?
使用uptime:
可以看到后面有:
0.03, 0.06, 0.09
這個表示1分鐘,5分鐘,15分鐘的平均負載。
平均負債是指單位時間內,系統處于可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數。
所謂可運行狀態的進程,是指正在使用cpu或者正在等待cpu的進程,也就是我們常用的ps命令看到的,處于r狀態(running 或runnable) 的進程。
不可中斷狀態的進程是正處于內核態關鍵中的流程,并且這些流程是不可打斷的,比如最常見的是等待硬件設備的io響應,
也就是我們在ps命令中看到的d狀態(uninterruptible sleep,也稱disk sleep)的進程。
比如平均負載是2:
-
在只有兩個cpu的系統上,意味著所有的cpu都剛好被完全占用。
-
在4個cpu的系統上,意味著cpu有50%的空閑。
-
在只有一個cpu的系統上,意味著有一半的進程競爭不到cpu。
什么時候平均負載合理:
查看cpu的個數:
grep 'model name' /proc/cpuinfo | wc -l
如果平均負載超過了核數,那么是過載,那么就是說有進程沒有競爭到cpu。
一般情況下,當平均負載高于cpu數量70%的時候,那么就應該增加配置或者調查一下原因。
而我們也是需要看cpu負載在1分鐘,5分鐘和15分鐘。
如果15分鐘的負載很高,而1分鐘的負載不高,那么就說明負載開始下來了。
反之,是最近才上去的。
平均負載和cpu使用率的區別。
平均負載包括正在使用的cpu,還有等待的cpu還有等待io的進程。
而cpu使用率就是表面意思,就是cpu的使用情況。
-
cpu 密集型進程,使用大量的cpu會導致平均負載升高,此時兩者是一致的。
-
i/o 密集型,等待io也會導致平均負載升高,但是cpu使用率不一定升高。
-
大量等待cpu的進程調度也會導致平均負載升高,此時的cpu使用率也會比較高。
下面對這3中情況,進行案例測試:
需要安裝stress,sysstat.
- 模擬cpu 密集型進程
stress --cpu 2 --timeout 600
可以看到平均負載升高了。
查看cpu 使用率:
mpstat -P ALL 5
可以看到cpu 使用率被拉滿了,但是iowait很低。
那么這個時候就是cpu密集型。
那么查看是哪個導致cpu使用100%。
使用pidstat:
pidstat -u 5 1
- 模擬cpu高的場景
stress -i 1 --hdd 1 --timeout 600
使用watch -d uptime:
使用mpstat 查看 mpstat -P -ALL 5 1:
然后使用pidstat -d 5 1:
可以看到是因為io的原因。
場景3,大量進程的場景:
模擬16個活躍進程的場景:
stress -c 16 --hdd 1 --timeout 600
負載情況:
可以看到io和cpu都不高:
因為進程太多。
結
下一節cpu 上下文切換。