一、stress(cpu)
stress是一個linux下的壓力測試工具,專門為那些想要測試自己的系統,完全高負荷和監督這些設備運行的用戶。
下載地址
http://people.seas.harvard.edu/~apw/stress/
進入到usr/local/bin目錄下: #cd /usr/local/src
上傳stress壓縮包: #rz
解壓縮包: #tar -xzpvf stress-1.0.4.tar.gz
進入到已解壓的文件夾: #cd stress-1.0.4
輸入./configure進行配置 : #./configure
然后進行以下命令輸入:
#make
#make check
#make install
最后輸入:stress --version 驗證是否安裝成功
命令參數:
Usage: stress [OPTION [ARG]] ... -?, --help //顯示幫助信息 --version //顯示軟件版本信息 -v, --verbose // be verbose -q, --quiet // be quiet -n, --dry-run //show what would have been done -t, --timeout N // timeout after N seconds --backoff N // wait factor of N microseconds before work starts -c, --cpu N //spawn N workers spinning on sqrt() -i, --io N //spawn N workers spinning on sync() -m, --vm N //spawn N workers spinning on malloc()/free() --vm-bytes B //malloc B bytes per vm worker (default is 256MB) --vm-stride B //touch a byte every B bytes (default is 4096) --vm-hang N //sleep N secs before free (default none, 0 is inf) --vm-keep //redirty memory instead of freeing and reallocating -d, --hdd N //spawn N workers spinning on write()/unlink() --hdd-bytes B //write B bytes per hdd worker (default is 1GB)
-?
--help 顯示幫助信息
--version 顯示軟件版本信息
-t secs:
--timeout secs指定運行多少秒
--backoff usecs 等待usecs微秒后才開始運行
-c forks:
--cpu forks 產生多個處理sqrt()函數的CPU進程
-m forks
--vm forks:產生多個處理malloc()內存分配
-i forks
--io forks:產生多個處理sync()函數的磁盤I/O進程
--vm-bytes bytes:指定內存的byte數,默認值是1
--vm-hang:表示malloc分配的內存多少時間后在free()釋放掉
-d :
--hdd:寫進程,寫入固定大小,通過mkstemp()函數寫入當前目錄
--hdd-bytes bytes:指定寫的byte數,默認1G
--hdd-noclean:不要將寫入隨機ascii數據的文件unlink,則寫入的文件不刪除,會保留在硬盤空間。
>>>>>>安裝過程中遇到的坑:
1、yum安裝會出現yum源的問題導致安裝不成功,如何解決呢?
博客:https://www.cnblogs.com/dadong616/p/5062727.html
2、沒有make命令
練習::
1、stress --cpu 1 --timeout 600 分析現象?負載為啥這么高?top命令查看用戶進程消耗的cpu過高(stress進程消耗的)
2、stress -i 1 --timeout 600 分析現象?top看負載升高,內核cpu過高? iostat -x stress消耗cpu多,iowait 等待 pidstat -d
3、stress -c 8 --timeout 600
案例:vu增加,tps降低,響應時間增加?
打印tomcat的整體響應時間,再打印接口的處理時間。
tomcat從1秒增加到8秒。
原因最后:線程池的上下文切換導致的線程等待時間過長。
4、sysbench --threads=10 --max-time=300 threads run
cswch自願上下文切換:進程無法獲取資源導致的上下文切換,比如;I/O,內存資源等系統資源不足,就會發生自願上下文切換。
nvcswch非自願上下文切換:進程由於時間片已到,被系統強制調度,進而發生的上下文切換 ,比如大量進程搶占cpu。
5、vmstat 默認看的是
pidstat -w 默認看的是進程的上下文切換
pidstat -wt -t參數看線程的上下文切換
6、python3 腳本運行分析
app.py
負載上來,top 定位到磁盤有問題
iostat -x 3 定位到寫操作有問題
pidstat -d 中斷不可恢復的情況比較多,定位到python進程的寫操作有問題
和寫操作有關,則和程序里的方法有問題
strace -p pid 跟蹤進程 ,可以看到是大量的寫操作,往log.txt里寫文件導致的
查看代碼,分析分析,可以看到代碼中的寫入大小
分析流程:
負載-cpu-b(中斷不可恢復的進程比如io)
負載高-cpu-iowait-io-(中斷、上下文切換、讀寫)-(pidstat -d)定位到某個進程的寫-(strace 跟蹤進程,定位到寫哪個文件)-查看源碼,定位到寫這個文件的代碼塊。
7、
8、