Linux 下常見的壓力測試工具不多,而且通常很分散,要不然就是協力廠商所開發的工具需收費而且所費不貲,不過現在 Linux 下有一套比較完整的壓力測試工具 sysbench http://sysbench.sourceforge.net/
使用上很簡單,用 apt-get install 就可以安裝 sysbench ,安裝完成之後就可以直接使用了.
ben@ben-SDV:~$ apt-get install sysbench
sysbench 提供 File I/O, CPU , Memory , Threads , Mutx , OLTP 的測試,下面我們一一來詳細了解.
ben@ben-SDV:~$ sysbench Compiled-in tests: fileio – File I/O test cpu – CPU performance test memory – Memory functions speed test threads – Threads subsystem performance test mutex – Mutex performance test oltp – OLTP test
cpu – CPU performance test
一般我們透過 SPEC CPU 測試 CPU 的效能與評分,sysbench 有提供測試 CPU 的效能與評分,其實他使用的方式也很簡單,只有參數 –cpu-max-prime=100000 就是讓 CPU 去計算出100000 的最大質數是多少,需要花多少時間來計算.
ben@ben-SDV:~$ sysbench --test=cpu --cpu-max-prime=100000 run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Doing CPU performance benchmark Threads started! Done. Maximum prime number checked in CPU test: 100000 Test execution summary: total time: 284.5265s total number of events: 10000 total time taken by event execution: 284.5207 per-request statistics: min: 28.37ms avg: 28.45ms max: 32.47ms approx. 95 percentile: 28.55ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 284.5207/0.00
不過這程式很難當作評斷 CPU 好壞的工具,在執行程式後仔細觀察 CPU 的使用狀況,你會發現他只用到單一顆核心去執行該程式.
mutex – Mutex performance test
因為剛剛 CPU 無法發揮所有的效能所以查了他另外一個參數 Mutex – http://sysbench.sourceforge.net/docs/#threads_mode
This test mode was written to emulate a situation when all threads run concurrently most of the time, acquiring the mutex lock only for a short period of time (incrementing a global variable). So the purpose of this benchmarks is to examine the performance of mutex implementation.
官網的說明就是採用多執行緒同時跑,看系統需要多少時間才能執行完畢.
ben@ben-SDV:~$ sysbench --test=mutex --num-threads=10000 --mutex-locks=100000 run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 10000 Doing mutex performance test Threads started! Done. Test execution summary: total time: 174.8060s total number of events: 10000 total time taken by event execution: 1643228.7121 per-request statistics: min: 94317.58ms avg: 164322.87ms max: 174452.17ms approx. 95 percentile: 173901.13ms Threads fairness: events (avg/stddev): 1.0000/0.00 execution time (avg/stddev): 164.3229/9.72
主要我用了 2 個參數.
-
mutex-num
Number of mutexes. The actual mutex to lock is chosen randomly before each lock 預設值為4096 -
mutex-locks
Number of mutex locks to acquire per each request 預設值為 50000
雖然 CPU 的負載是平均分配但沒有辦法達到全速 100% 的運作.可能需要再搭配 sysbench 其他的壓力測試工具才會讓系統效能開到 100% 吧.
下面幾項我就沒有特別再試,透過 man sysbench 就可以查到一些相關的測試方式.
memory – Memory functions speed test
ben@ben-SDV:~$ sysbench --test=memory --memory-block-size=8K --memory-total-size=1G --memory-oper=read run ben@ben-SDV:~$ sysbench --test=memory --memory-block-size=8K --memory-total-size=1G --memory-oper=write run
threads – Threads subsystem performance test
還沒有仔細研究過.
oltp – OLTP test
步驟可以分為 prepare , run , cleanup ,詳細說明請參考 https://benjr.tw/95251 , https://benjr.tw/95619
ben@ben-SDV:~$ sysbench --test=oltp --mysql-table-type=myisam --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock prepare ben@ben-SDV:~$ sysbench --num-threads=16 --max-requests=100000 --test=oltp --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --oltp-read-only run
fileio – File I/O test
ben@ben-SDV:~$ sysbench --num-threads=16 --test=fileio --file-total-size=3G --file-test-mode=rndrw prepare ben@ben-SDV:~$ sysbench --num-threads=16 --test=fileio --file-total-size=3G --file-test-mode=rndrw run ben@ben-SDV:~$ sysbench --num-threads=16 --test=fileio --file-total-size=3G --file-test-mode=rndrw cleanup
在 RedHat 6 下我使用官方網站的 sysbench-0.4.12.tar.gz ,使用
不過在 make 的時候就產生錯誤了,所以找到的 rpm 檔案來使用
http://pkgs.org/centos-6-rhel-6/epel-x86_64/sysbench-0.4.12-5.el6.x86_64.rpm/download/