-
wrktcp安装
码云地址:
https://gitee.com/icesky1stm/wrktcp
直接下载,cd wrktcp-master && make,会生成wrktcp,就ok了,很简单
-
wrktcp使用
压测首先需要一个服务,写了一个epoll+边沿触发的服务,业务是判断ip是在国内还是国外,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,直接执行./epoll_test,监听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就是要发的协议,但是wrktcp会在前面加长度固定8位:00000015;默认成功成功响应码是000000,设置rsp_code_location这个会让wrktcp从返回协议(000000010)头开始找成功响应码
上面那些说明:wrktcp的README有一些说明,但解释的不太全,需要自己去试和看源码
-
todo
固定协议前面加8位长度,不可能每个服务都是这样的协议,怎么去自定义的协议,希望大佬指教,好像wrk可以自定义协议。
-
wrk压测命令
./wrktcp -t15 -c15 -d100s --latency sample_tiny.ini
-t, --threads: 使用线程总数,一般推荐使用CPU核数的2倍-1
-c, --connections: 连接总数,与线程无关。每个线程的连接数为connections/threads
-d, --duration: 压力测试时间, 可以写 2s, 2m, 2h
--latency: 打印延迟分布情况
--timeout: 指定超时时间,默认是5000毫秒,越长占用统计内存越大。
--trace: 打印出分布图
--html: 将压测的结果数据,输出到html文件中。
--test: 每个连接只会执行一次,一般用于测试配置是否正确。
-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
压测监测服务:perf record -p 10263 -a -g -F 99 -- sleep 10
参数说明:
-p : 进程
-a : 记录所有事件
-g : 启用基于 DWARF 调试信息的函数调用栈跟踪。这将记录函数调用栈信息,使得生成的报告更加详细,能够显示出函数调用的关系。
-F : 采样频率
--sleep:执行 sleep 命令,使系统休眠 10 秒钟。在这个期间,perf record 将记录指定进程的性能数据。
会在当前目录生成perf.data文件,执行perf report,会看到printf和write占用的CPU比较高,删除上面服务的printf和write函数,重新压测
重新压测之后,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