使用sysbench 壓測
1.sysbench基礎知識
sysbench的cpu測試是在指定時間內,迴圈進行素數計算
素數(也叫質數)就是從1開始的自然數中,無法被整除的數,比如2、3、5、7、11、13、17等。程式設計公式:對正整數n,如果用2到根號n之間的所有整數去除,均無法整除,則n為素數
它主要包括以下幾種方式的測試型別:
1. cpu 處理器效能
2. threads 執行緒排程器效能
3. mutex 互斥鎖效能
4. memory 記憶體分配及傳輸速度
5. fileio 檔案IO效能
6. oltp 資料庫效能(OLTP基準測試)
2.sysbench安裝
# CentOS7下可使用yum安裝
yum install sysbench
3.CPU壓測
1)壓測命令
2)常用引數
--cpu-max-prime: 素數生成數量的上限
- 若設定為3,則表示2、3、5(這樣要計算1-5共5次)
- 若設定為10,則表示2、3、5、7、11、13、17、19、23、29(這樣要計算1-29共29次)
- 預設值為10000
--threads: 執行緒數
- 若設定為1,則sysbench僅啟動1個執行緒進行素數的計算
- 若設定為2,則sysbench會啟動2個執行緒,同時分別進行素數的計算
- 預設值為1
--time: 執行時長,單位秒
- 若設定為5,則sysbench會在5秒內迴圈往復進行素數計算, 從輸出結果可以看到在5秒內完成了幾次, 比如配合--cpu-max-prime=3,則表示第一輪算得3個素數, 如果時間還有剩就再進行一輪素數計算,直到時間耗盡。 每完成一輪就叫一個event
- 預設值為10
- 相同時間,比較的是誰完成的event多
--time: 執行時長,單位秒
- 若設定為100,則表示當完成100次event後,即使時間還有剩,也停止執行
- 預設值為0,則表示不限event次數
- 相同event次數,比較的是誰用時更少
3)案例結果分析
執行命令
# 素數上限2萬,預設10秒,2個執行緒
sysbench cpu --cpu-max-prime=20000 --threads=2 run
結果分析
sysbench 1.0.9 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 2 // 指定執行緒數為2 Initializing random number generator from current time Prime numbers limit: 20000 // 每個執行緒產生的素數上限均為2萬個 Initializing worker threads... Threads started! CPU speed: events per second: 650.74 // 所有執行緒每秒完成了650.74次event General statistics: total time: 10.0017s // 共耗時10秒 total number of events: 6510 // 10秒內所有執行緒一共完成了6510次event Latency (ms): min: 3.03 // 完成1次event的最少耗時3.03秒 avg: 3.07 // 所有event的平均耗時3.07毫秒 max: 3.27 // 完成1次event的最多耗時3.27毫秒 95th percentile: 3.13 // 95%次event在3.13秒毫秒內完成 sum: 19999.91 // 每個執行緒耗時10秒,2個執行緒疊加耗時就是20秒 Threads fairness: events (avg/stddev): 3255.0000/44.00 // 平均每個執行緒完成3255次event,標準差為44 execution time (avg/stddev): 10.0000/0.00 // 每個執行緒平均耗時10秒,標準差為0
event: 完成了幾輪的素數計算
stddev(標準差): 在相同時間內,多個執行緒分別完成的素數計算次數是否穩定,如果數值越低,則表示多個執行緒的結果越接近(即越穩定)。該引數對於單執行緒無意義。
4)結果分析
如果有2臺伺服器進行CPU效能對比,當素數上限和執行緒數一致時:
- 相同時間,比較event
- 相同event,比較時間
- 時間和event都相同,比較stddev(標準差)
參考:linux sysbench (一): CPU效能測試詳解 - seasonzone - 部落格園 (cnblogs.com)
4.fileio 檔案IO效能壓測
1)測試命令
# 執行緒數=4 每隔4s輸出一次結果 測試時間=60s
# 檔案數=2 檔案總大小=4G 檔案操作模式=隨機讀寫
# 塊大小 16384
sysbench --threads=4 --report-interval=4 --time=60 --test=fileio --file-num=2 --file-total-size=4G --file-test-mode=rndrw prepare
sysbench --threads=4 --report-interval=4 --time=60 --test=fileio --file-num=2 --file-total-size=4G --file-test-mode=rndrw run
sysbench --threads=4 --report-interval=4 --time=60 --test=fileio --file-num=2 --file-total-size=4G --file-test-mode=rndrw cleanup
2)I/O效能測試引數
# fileio options([]為預設引數): --file-num=N # 建立的檔案數量 [128] --file-block-size=N # 在所有IO操作中使用的塊大小 [16384] --file-total-size=SIZE # 要建立的檔案的總大小 [2G] --file-test-mode=STRING # 測試模式 {seqwr(順序寫), seqrewr(順序重寫), seqrd(順序讀), rndrd(隨機讀), rndwr(隨機寫), rndrw(隨機讀寫)} --file-io-mode=STRING # 檔案操作模式 {sync(同步),async(非同步),mmap} [sync] --file-extra-flags=[LIST,...] # 用於開啟檔案的附加標誌列表 {sync,dsync,direct} [] --file-fsync-freq=N # 執行N條請求數量後執行fsync() (0 - don't use fsync()) [100] --file-fsync-all[=on|off] # 每條寫指令後執行fsync() [off] --file-fsync-end[=on|off] # 測試執行後執行fsync() [on] --file-fsync-mode=STRING # 同步方式 {fsync, fdatasync} [fsync] --file-merged-requests=N # 允許範圍內,最多合併IO請求數量 (0 - don't merge) [0] --file-rw-ratio=N # 組合測試讀/寫比率 [1.5]
3)案例結果分析
Extra file open flags: (none) 2 files, 2GiB each 4GiB total file size Block size 16KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Initializing worker threads... Threads started! [ 4s ] reads: 155.03 MiB/s writes: 103.35 MiB/s fsyncs: 329.73/s latency (ms,95%): 0.099 # 讀速度 寫速度 fsyncs()呼叫次數 [ 8s ] reads: 141.36 MiB/s writes: 94.24 MiB/s fsyncs: 302.25/s latency (ms,95%): 0.095 [ 12s ] reads: 187.62 MiB/s writes: 125.08 MiB/s fsyncs: 400.25/s latency (ms,95%): 0.097 ...# 中間輸出部分刪除 [ 56s ] reads: 139.68 MiB/s writes: 93.11 MiB/s fsyncs: 297.98/s latency (ms,95%): 0.097 [ 60s ] reads: 178.84 MiB/s writes: 119.23 MiB/s fsyncs: 381.53/s latency (ms,95%): 0.099 File operations: reads/s: 9536.35 # 讀操作/s writes/s: 6357.60 # 寫操作/s fsyncs/s: 318.01 # fsyncs操作/s Throughput: read, MiB/s: 149.01 # 讀速度 written, MiB/s: 99.34 # 寫速度 General statistics: total time: 60.0075s # 測試時間 total number of events: 972876 # events總數 Latency (ms): min: 0.00 # 最小耗時 數值太小,輸出精度不夠 avg: 0.24 # 平均耗時 max: 1569.96 # 最大耗時 95th percentile: 0.10 # 95%events操作耗時 sum: 237799.11 # 所有執行緒的耗時總和 Threads fairness: events (avg/stddev): 243219.0000/683.34 # 平均每執行緒完成events數/標準差 execution time (avg/stddev): 59.4498/0.00 # 平均每執行緒執行時間/標準差
參考:(6條訊息) Sysbench效能測試(四): 檔案I/O效能測試_-Obliviate的部落格-CSDN部落格
5.OLTP資料庫效能(OLTP基準測試)
使用sysbench 做資料庫效能壓測。需要現在伺服器上建立測試庫
》》create database db1;
1.初始化壓測資料, 壓測完成之後需要刪除
sysbench --db-driver=mysql --time=90 --threads=4 --report-interval=10 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password='11111111111' --mysql-db=db1 --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
引數:
–mysql-db=test //測試資料庫
–mysql-user=root //使用者名稱
–myssql-password=123456 //密碼
--tables / –oltp-tables-count=8 //表的數量
--table_size / –oltp-table-size=100000 //每張表記錄為10萬
–mysql-sock=/var/lib/mysql/mysql.sock //mysql.sock路徑,本地連線時可指定host ip連線,也可直接使用Mysql.sock連線