sysbench壓測小記(r11筆記第99天)

2021-09-22 19:27:07 字數 3885 閱讀 6774

對於很多線上業務而言,如果有新伺服器,新的環境,新的業務,到底資源和預期的承載壓力是否匹配,這個得用資料說話,或是通過嚴謹的論證來闡述。

比如一台新的伺服器,一般都需要經過壓力測試,我們也叫拷機測試。一般都會從多個維度來進行加壓(比如cpu,記憶體,io等等),看看伺服器是否依舊堅挺,雖然這一點上如果產生了懈怠或者懶惰還是會被輕視,但是從身邊的例子來看,還是會測試出一些問題來,如果發現了問題,就避免了後續的很多被動。

sysbench就是這麼乙個工具,功能非常全面。是乙個標準模組化,多執行緒的基準測試工具。

這個工具能夠測試哪些方面呢,我們用命令來說明。

sysbench --help

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簡單來說就是下面的一些方面。

1、磁碟io效能

2、cpu運算效能

3、排程程式效能

4、記憶體分配及傳輸速度

5、posix執行緒效能

6、資料庫效能(oltp基準測試)

比如測試cpu,如果讓我們測試還真沒有什麼好的思路,看看sysbench是怎麼做的,可以使用命令sysbench --test=cpu help得到如下的結果:

cpu options:

--cpu-max-prime=n upper limit for primes generator [10000]可以看到重要的關鍵字prime,即質數,比如查詢小於一千萬的最大質數,這個問題還是蠻燒腦的,就讓cpu來燒吧,這樣執行即可。會啟用10個併發執行緒,最大請求數是100

/usr/local/bin/sysbench --num-threads=10 --max-requests=100 --test=cpu --debug --cpu-max-prime=10000000 run

有了cpu壓測的基本概念,後續的幾種解釋起來就相對容易一些了。

比如測試記憶體,可以指定測試範圍,如32g,64g根據自己需要來。

比如我們測試32g記憶體,併發執行緒數是10個,最大請求數是100,分別從讀和寫兩種測試來做。

記憶體讀測試

/usr/local/bin/sysbench --num-threads=10 --max-requests=100

--test=memory --memory-block-size=8k --memory-total-size=32g

--memory-oper=readrun記憶體寫測試

/usr/local/bin/sysbench --num-threads=10 --max-requests=100 --test=memory --memory-block-size=8k --memory-total-size=32g--memory-oper=writerun而對於io測試而言,是有些區別的,因為會有準備資料(比如寫乙個臨時檔案),所以會分成幾個階段,準備階段,執行階段,清理階段。

下面就是乙個相對簡單的場景,20個檔案,每個10gb,隨機讀寫,檔案大小總量在200g.

/usr/local/bin/sysbench --file-num=20 --num-threads=20 --test=fileio

--file-total-size=

200g--max-requests=1000000 --file-test-mode=rndrwprepare

/usr/local/bin/sysbench --file-num=20 --num-threads=20

--test=fileio --file-total-size=

200g--max-requests=1000000 --file-test-mode=rndrwrun

/usr/local/bin/sysbench --file-num=20

--num-threads=20 --test=fileio --file-total-size=

200g--max-requests=1000000 --file-test-mode=rndrwcleanup硬體類的測試,基本一次測試就能夠得到乙個基線資料,就不需要反反覆覆測試了。而對於dba還是開發同學而言,更加關注於業務層面,我們會從很多可能的角度和場景去分析權衡,這些sysbench也是支援的,就是oltp選項。

當然sysben對於mysql的支援是原生的,而對於其他的資料oracle,postgresql等資料,需要單獨配置。

因為應用測試會產生基礎資料,所以也是分為多階段的。

比如準備基礎資料,進行壓力測試,最後的統計結果和後期的清理。這裡值得說的是,對於較低版本的sysbench而言,還不支援多表引數--oltp_tables_count,準備好基礎資料,後面就會開啟多執行緒模式進行模擬壓力的測試。比如下面的命令,測試模式complex,併發執行緒數30,最大請求數5000000 ,表的資料量在一億。先建立乙個測試庫sysbenchtest,測試完成之後刪除即可。

mysql -uroot -e "create database if not exists sysbenchtest"

/usr/local/bin/sysbench --mysql-user=root --test=oltp

--mysql-host=localhost --oltp-test-mode=complex

--mysql-table-engine=innodb --oltp-table-size=100000000

--mysql-db=sysbenchtest --oltp-table-name=innodb_test --num-threads=30

--max-requests=5000000

prepare

/usr/local/bin/sysbench

--mysql-user=root --test=oltp --mysql-host=localhost

--oltp-test-mode=complex --mysql-table-engine=innodb

--oltp-table-size=100000000 --mysql-db=sysbenchtest

--oltp-table-name=innodb_test --num-threads=30 --max-requests=5000000

run

mysql -uroot -e "drop table if exists sysbenchtest.innodb_test; drop database if exists sysbenchtest"

在一台伺服器上我進行了測試,發現1億左右的資料,資料檔案在24g左右。

-rw-r----- 1 mysql mysql 61 mar 10 11:20 db.opt

-rw-r----- 1 mysql mysql 8632 mar 10 11:20 innodb_test.frm

-rw-r----- 1 mysql mysql 24419237888 mar 10 13:29 innodb_test.ibd

得到的報告如下,可以看到整個過程持續了近3個小時,tps在455左右,其實還是不高的。

對於壓力測試,其實乙個蠻不錯的想法,就是我指定壓測的策略,然後讓它去在後台執行,mgr測試指令碼已經寫好,會在測試之後共享給大家,這樣一來,我可以在瞬間建立出多個節點,然後測試很多複雜的壓力場景。到時候我就直接檢視資料,得到乙個報告,想想都很有意思。

sysbench壓測使用問題記錄

在使用sysbench0.4進行壓測的過程中發現,如果在單使用者併發下,如果指定了不同的,oltp table size及oltp tables count,得到的結果偏差很大,在測試不同的使用者併發的時候,需要根據情況指定不同的oltp tables count 值。在服務端通過show proc...

電商雙11聯合壓測

雙11在進行程式擴容後,進行聯合壓測演練,主要上游進行程式層面壓測,下游可以 一併分析壓測情況並進行分析。梳理了程式對於redis的依賴,程式對於資料庫的依賴,程式本身的降級預案,呼叫別人 服務的降級預案。在過程中遇到了一些問題,前邊文章已經分析到一種情況在併發量高時清理磁碟,在 寫日誌程式會發生極...

OPPO R15首銷超越R11,創歷史新高

4月1日是oppo r15首銷的大日子,在開售10個小時,oppo r15系列成為天貓 蘇寧 京東三大電商平台的手機全價位段銷售和銷量額的雙料冠軍。oppo r15首日的銷量又超越了oppo r11的首銷紀錄。如此火爆的資料,還得歸根於oppo的實力。oppo僅僅在24小時內創造了如此的輝煌的成績,...