作性能測試的必備知識系列,能夠看下面連接的文章哦html
https://www.cnblogs.com/poloyy/category/1806772.htmlswift
Linux 系統壓力測試工具,這裏經過異常進程模擬平均負載升高的場景函數
字段 | 含義 |
---|---|
-?、--help | 幫助文檔 |
--version、-v | 版本號 |
-q | 退出 |
-n | 顯示已完成指令的狀況 |
-t N、--timeout N | 運行 N 秒後中止 |
--backoff N | 等待 N 微秒後開始運行 |
-c N、--cpu N |
|
-i N、--io N |
|
-m N、--vm N |
|
--vm-bytes B工具 |
指定 malloc() 時內存的字節數,默認256MB |
--vm-hang N | 指定執行 free() 前等待的秒數 |
-d N、 --hdd N |
|
--hdd-bytes B | 每一個 hdd worker 寫入 B 字節(默認爲1GB)性能 |
時間單位能夠爲秒 s,分m,小時h,天d,年y,文件大小單位能夠爲 K,M,G測試
連接:https://pan.baidu.com/s/1YENSYaGw7Ar1Z8hf8CXGqAspa
提取碼:2tpc命令行
放到 Linux 下的某個目錄3d
tar -zxvf sysstat-12.1.5.tar.gz tar -zxvf stress-1.0.4.tar.gz
./configure make&&make install
在第一個終端運行 stress 命令,模擬一個 CPU 使用率 100% 的場景code
stress -c 1 -t 600
運行 uptime 查看系統平均負載狀況,-d 參數表示高亮顯示變化的區域
watch -d uptime
能夠看到,1 分鐘的平均負載會慢慢增長到 1.00
運行 mpstat 查看 CPU 使用率的變化狀況
mpstat -P ALL 5
能夠看出
接下來,就要排查是哪一個進程致使 CPU 的使用率這麼高的
間隔 5 秒後輸出一組數據
pidstat -u 5 1
從這裏能夠明顯看到,stress 進程的 CPU 使用接近 100%
運行 stress 命令,但此次模擬 I/O 壓力,即不停地執行 sync()
運行 uptime 查看系統平均負載狀況,-d 參數表示高亮顯示變化的區域
watch -d uptime
能夠看到,1 分鐘的平均負載也會慢慢增長到 1.00
運行 mpstat 查看 CPU 使用率的變化狀況
mpstat -P ALL 5 1
其實 iowait 並無上去,反而仍是系統態(%sys)升高了,這是怎麼回事?難道是工具的問題?
使用 stress 的另外一個參數 -d ,含義上面已經說了哦
stress --hdd 1 -t 600 --hdd-bytes 4G
mpstat -P ALL 5
能夠看到
接下來,就要排查是哪一個進程致使 iowait 這麼高了
間隔 5 秒後輸出一組數據,收集 10 次,查看最後的平均值
pidstat -u 5 10
能夠看到
kworker 內核進程 和 stress 進程的 CPU 使用率都是偏高的
當系統中運行進程超出 CPU 運行能力時,就會出現等待 CPU 的進程
此次模擬 8 個進程
stress -c 8 -t 600
運行 uptime 查看系統平均負載狀況,-d 參數表示高亮顯示變化的區域
watch -d uptime
個人系統只有 4 個 CPU,比 8 個進程少得多,CPU 處於嚴重的過載狀態,平均負載已經超過 8 了
能夠直接經過 pidstat 來查看進程的狀況了,每隔 5s 收集一次,收集 5 次,看平均值
pidstat -u 5 5
能夠看到
平均負載太高是出現性能瓶頸的表現,分析瓶頸產生的源頭和緣由,須要經過各種工具