一、什麼是平均負載
正確定義:單位時間內,系統中處於可運行狀態和不可中斷狀態的平均進程數。
錯誤定義:單位時間內的cpu使用率。
可運行狀態的進程:正在使用cpu或者正在等待cpu的進程,即ps aux命令下STAT處於R狀態的進程
不可中斷狀態的進程:處於內核態關鍵流程中的進程,且不可被打斷,如等待硬件設備IO響應,ps命令D狀態的進程
理想狀態:每個cpu上都有一個活躍進程,即平均負載數等於cpu數
過載經驗值:平均負載高於cpu數量70%的時候
二、相關命令
cpu核數: lscpu、 grep 'model name' /proc/cpuinfo | wc -l
顯示平均負載:uptime、top,顯示的順序是最近1分鐘、5分鐘、15分鐘,從此可以看出平均負載的趨勢
watch -d uptime: -d會高亮顯示變化的區域
strees: 壓測命令,--cpu cpu壓測選項,-i io壓測選項,-c 進程數壓測選項,--timeout 執行時間
mpstat: 多核cpu性能分析工具,-P ALL監視所有cpu
pidstat: 進程性能分析工具,-u 顯示cpu利用率
三、平均負載與cpu使用率的區別
CPU使用率:單位時間內cpu繁忙情況的統計
情況1:CPU密集型進程,CPU使用率和平均負載基本一致
情況2:IO密集型進程,平均負載升高,CPU使用率不一定升高
情況3:大量等待CPU的進程調度,平均負載升高,CPU使用率也升高
多個進程競爭CPU會導致上下文切換,從而使系統負載過高
四、平均負載過高時,如何調優
工具:stress、sysstat,yum即可安裝
1. CPU密集型進程case:
mpstat -P ALL 5: -P ALL表示監控所有CPU,5表示每5秒刷新一次數據,觀察是否有某個cpu的%usr會很高,但iowait應很低
pidstat -u 5 1:每5秒輸出一組數據,觀察哪個進程%cpu很高,但是%wait很低,極有可能就是這個進程導致cpu飈高
2. IO密集型進程case:
mpstat -P ALL 5: 觀察是否有某個cpu的%iowait很高,同時%usr也較高
pidstat -u 5 1:觀察哪個進程%wait較高,同時%CPU也較高
如果iowait上不去,應該使用stress-ng -i 1 --hdd 1 --timeout 600命令來模擬情況
3. 大量進程case:
pidstat -u 5 1:觀察那些%wait較高的進程是否有很多