請關注本頭條號,每天堅持更新原創乾貨技術文章。
如需學習視頻,請在微信搜索公眾號「智傳網優」直接開始自助視頻學習
1. 前言
本文主要講解如何使用sysbench這款軟體對Linux伺服器進行基準測試,它支持CPU、線程、內存、資料庫壓力測試,是程序開發專業人員經常使用的一款基準壓力測試軟體。
2. 基準測試與壓力測試
基準測試可以理解為針對系統的一種壓力測試。但基準測試不關心業務邏輯,更加簡單、直接、易於測試,數據可以由工具生成,不要求真實;而壓力測試一般考慮業務邏輯(如購物車業務),要求真實的數據。
3. 基準測試的作用
對於多數Web應用,整個系統的瓶頸在於資料庫;原因很簡單:Web應用中的其他因素,例如網絡帶寬、負載均衡節點、應用伺服器(包括CPU、內存、硬碟燈、連接數等)、緩存,都很容易通過水平的擴展(俗稱加機器)來實現性能的提高。而對於MySQL,由於數據一致性的要求,無法通過增加機器來分散向資料庫寫數據帶來的壓力;雖然可以通過前置緩存(Redis等)、讀寫分離、分庫分表來減輕壓力,但是與系統其它組件的水平擴展相比,受到了太多的限制。
而對資料庫的基準測試的作用,就是分析在當前的配置下(包括硬體配置、OS、資料庫設置等),資料庫的性能表現,從而找出MySQL的性能閾值,並根據實際系統的要求調整配置。
4. 基準測試的指標
資料庫指標
- TPS/QPS:衡量吞吐量。
- 響應時間:包括平均響應時間、最小響應時間、最大響應時間、時間百分比等,其中時間百分比參考意義較大,如前95%的請求的最大響應時間。。
- 並發量:同時處理的查詢請求的數量。
5. 基準測試的分類
對MySQL的基準測試,有如下兩種思路:
- 針對整個系統的基準測試:通過http請求進行測試,如通過瀏覽器、APP或postman等測試工具。該方案的優點是能夠更好的針對整個系統,測試結果更加準確;缺點是設計複雜實現困難。
- 只針對MySQL的基準測試:優點和缺點與針對整個系統的測試恰好相反。
在針對MySQL進行基準測試時,一般使用專門的工具進行,例如mysqlslap、sysbench等。其中,sysbench比mysqlslap更通用、更強大,且更適合Innodb(因為模擬了許多Innodb的IO特性),下面介紹使用sysbench進行基準測試的方法。
6. 安裝sysbench
7. 使用sysbench測試系統性能
軟體安裝完成後,就要開始測試各種性能了,測試的方法官網網站上也提到一些,但涉及到 OLTP 測試的部分卻不夠準確。在這裡我大致提一下:
7.1 cpu性能測試
自己可以根據機器cpu的性能來適當調整數值。如下二圖查看CPU配置!
[root@zcwyou ~]# cat /proc/cpuinfo
sysbench01.png
7.2 執行以下命令,進行CPU測試
[root@zcwyou ~]# sysbench --test=cpu --cpu-max-prime=20000 run
sysbench進行CPU測試
cpu測試主要是進行素數的加法運算,在下圖例子中,指定了最大的質數發生器數量為 20000,可以看出伺服器此次測試 執行時間 大約為10.0005s秒7.3 線程測試
[root@zcwyou ~]# sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
如下圖 (發送64次/個測試線程請求,每次/個線程請求產生/生成100個數量,每個線程的鎖數量為2) ,下圖的測試執行時間為10.0051s秒
sysbench線程測試.png
7.4 內存測試
[root@zcwyou ~]# sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run
上述參數指定了本次測試整個過程是在內存中傳輸 4G 的數據量,每個 block 大小為 8K。測試結果如下圖:
執行時間為0.3844秒,每秒傳輸速度為10586.47Mb每秒
sysbench內存測試
7.5 OLTP測試
[root@zcwyou ~]# sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test prepare
上述參數指定了本次測試的表存儲引擎類型為 myisam,這裡需要注意的是,官方網站上的參數有一處有誤,即 --mysql-table-engine,官方網站上寫的是 --mysql-table-type,這個應該是沒有及時更新導致的。另外,指定了表最大記錄數為 1000000,其他參數就很好理解了,主要是指定登錄方式。測試 OLTP 時,可以自己先創建資料庫 sbtest,或者自己用參數 --mysql-db 來指定其他資料庫。--mysql-table-engine 還可以指定為 innodb 等 MySQL 支持的表存儲引擎類型。
8. 總結
sysbench可以用於CPU、線程、內存、資料庫壓力測試,是一個綜合性能的判斷工具,也往往用於判斷硬體和系統的穩定性,應該是一款不錯的拷機軟體。
本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下連結:
https://www.linuxrumen.com/cyml/721.html
點擊了解更多,快速查看更多的技術文章列表。