-
wrktcp安裝
碼云地址:
https://gitee.com/icesky1stm/wrktcp
直接下載,cd wrktcp-master && make,會生成wrktcp,就ok了,很簡單
-
wrktcp使用
壓測首先需要一個服務(wù),寫了一個epoll+邊沿觸發(fā)的服務(wù),業(yè)務(wù)是判斷ip是在國內(nèi)還是國外,rq:00000015CHECKIP1.0.4.0,rs:000000010,寫的有些就簡陋兌付看吧,主要為了壓測和分析性能瓶頸。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
編譯g++ epoll_test.cpp -o epoll_test,直接執(zhí)行./epoll_test,監(jiān)聽0的9999端口
[common]
# ip & port
host = 127.0.0.1
port = 9999
[request]
req_body = CHECKIP1.0.4.0
[response]
rsp_code_location = head
說下其中的坑,req_body就是要發(fā)的協(xié)議,但是wrktcp會在前面加長度固定8位:00000015;默認(rèn)成功成功響應(yīng)碼是000000,設(shè)置rsp_code_location這個會讓wrktcp從返回協(xié)議(000000010)頭開始找成功響應(yīng)碼
上面那些說明:wrktcp的README有一些說明,但解釋的不太全,需要自己去試和看源碼
-
todo
固定協(xié)議前面加8位長度,不可能每個服務(wù)都是這樣的協(xié)議,怎么去自定義的協(xié)議,希望大佬指教,好像wrk可以自定義協(xié)議。
-
wrk壓測命令
./wrktcp -t15 -c15 -d100s --latency sample_tiny.ini
-t, --threads: 使用線程總數(shù),一般推薦使用CPU核數(shù)的2倍-1
-c, --connections: 連接總數(shù),與線程無關(guān)。每個線程的連接數(shù)為connections/threads
-d, --duration: 壓力測試時間, 可以寫 2s, 2m, 2h
--latency: 打印延遲分布情況
--timeout: 指定超時時間,默認(rèn)是5000毫秒,越長占用統(tǒng)計內(nèi)存越大。
--trace: 打印出分布圖
--html: 將壓測的結(jié)果數(shù)據(jù),輸出到html文件中。
--test: 每個連接只會執(zhí)行一次,一般用于測試配置是否正確。
-v --version: 打印版本信息
測試了兩遍,TPS能維持在1600左右
Running 2m loadtest @ 127.0.0.1:9999 using sample_tiny.ini
15 threads and 15 connections
Time:100s TPS:1644.64/0.00 Latency:7.69ms BPS:14.45KB Error:0
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.66ms 14.17ms 318.09ms 98.89%
Req/Sec 113.66 233.09 1.69k 94.95%
Latency Distribution
50% 823.00us
75% 8.17ms
90% 9.15ms
99% 23.08ms
164554 requests in 1.67m, 1.41MB read
Requests/sec: 1643.21 (Success:1643.21/Failure:0.00)
Transfer/sec: 14.44KB
-
perf
壓測監(jiān)測服務(wù):perf record -p 10263 -a -g -F 99 -- sleep 10
參數(shù)說明:
-p : 進程
-a : 記錄所有事件
-g : 啟用基于 DWARF 調(diào)試信息的函數(shù)調(diào)用棧跟蹤。這將記錄函數(shù)調(diào)用棧信息,使得生成的報告更加詳細,能夠顯示出函數(shù)調(diào)用的關(guān)系。
-F : 采樣頻率
--sleep:執(zhí)行 sleep 命令,使系統(tǒng)休眠 10 秒鐘。在這個期間,perf record 將記錄指定進程的性能數(shù)據(jù)。
會在當(dāng)前目錄生成perf.data文件,執(zhí)行perf report,會看到printf和write占用的CPU比較高,刪除上面服務(wù)的printf和write函數(shù),重新壓測
重新壓測之后,TPS能維持在3W+
Running 2m loadtest @ 127.0.0.1:9999 using sample_tiny.ini
15 threads and 15 connections
Time:100s TPS:32748.45/0.00 Latency:438.00us BPS:287.83KB Error:0
Thread Stats Avg Stdev Max +/- Stdev
Latency 519.35us 1.24ms 63.18ms 97.47%
Req/Sec 2.19k 536.83 4.83k 76.97%
Latency Distribution
50% 349.00us
75% 426.00us
90% 507.00us
99% 5.12ms
3275261 requests in 1.67m, 28.11MB read
Requests/sec: 32716.39 (Success:32716.39/Failure:0.00)
Transfer/sec: 287.55KB