wrk压测Gin服务QPS偏低,需合理设置-t和-c参数、关闭pprof/日志中间件、添加Accept-Encoding头启用gzip测试、用Lua脚本直压Handler,并检查超时配置、系统内核参数及DNS解析。

wrk压测Gin服务时QPS远低于预期,先检查线程与连接数配比
wrk的 -t(线程)和 -c(连接数)不是越大越好,尤其在Gin这类基于Go net/http的服务器上。Gin本身依赖Go runtime调度goroutine,而wrk每条连接对应一个TCP socket,过多连接会触发内核socket资源竞争或Go runtime的网络轮询压力。
常见错误现象:Req/Sec 波动剧烈、Latency 突增、wrk自身CPU打满但Gin服务CPU未饱和。
-
-t建议设为压测机CPU逻辑核心数的1.5–2倍(例如4核机器用-t6),避免线程切换开销反超收益 -
-c应 ≥-t,但不宜超过1000(除非明确调大了Gin服务端的http.Server.ReadTimeout和系统net.core.somaxconn) - 若Gin服务启用了
pprof或日志中间件,务必在压测前关闭——它们会显著拖慢单请求耗时,掩盖真实路由/Handler性能
Gin启用gzip后wrk压测结果失真,必须加--header模拟真实客户端
Gin默认不自动压缩响应,需显式启用 gin.Gzip() 中间件;但wrk默认不发 Accept-Encoding: gzip 头,导致即使Gin配置了gzip,实际压测走的仍是未压缩路径,测出的吞吐量虚高、延迟虚低。
正确做法是强制wrk带上压缩协商头:
wrk -t4 -c200 -d30s --header "Accept-Encoding: gzip" http://localhost:8080/api/v1/ping
否则你优化了半天gzip参数(比如 gin.Gzip(6)),压测数据根本反映不出效果。更隐蔽的问题是:某些前端SDK或CDN会自动解压并缓存gzip内容,而wrk没解压逻辑,直接统计原始字节数——这会导致带宽类指标不可比。
用Lua脚本绕过Gin中间件,精准压测Handler层性能
想单独评估Gin Handler函数本身的吞吐能力(排除Logger、Recovery、JWT校验等中间件干扰),不能靠禁用中间件——那样破坏了真实调用链。wrk的 -s 参数配合Lua脚本能精准控制请求构造与响应解析。
例如,写一个 handler_bench.lua,跳过所有Gin中间件,直连Handler逻辑(需Gin暴露底层 http.HandlerFunc):
function setup(thread)
thread:set("id", thread:get("id"))
end
<p>request = function()
return wrk.format("GET", "/api/v1/ping")
end</p><p>response = function(status, headers, body)
-- 仅统计200响应,忽略中间件返回的500
if status == 200 then
wrk.thread:incr("valid_reqs")
end
end执行命令:wrk -t4 -c200 -d10s -s handler_bench.lua http://localhost:8080。注意:该方式要求Gin路由无强依赖中间件注入的context值(如 c.MustGet("user_id")),否则会panic。
Gin服务端未调优导致wrk压测瓶颈卡在系统层
wrk报告里 Latency Distribution 的99%值突然跳到秒级,但Gin日志里Handler耗时只有几毫秒——说明瓶颈不在Go代码,而在OS或Go runtime配置。
必须检查三项:
- Gin启动时是否设置了
http.Server.ReadTimeout/WriteTimeout?默认0值意味着无限等待,容易被慢连接拖住accept队列 - Linux系统是否调大了
net.core.somaxconn(建议≥65535)和net.ipv4.tcp_max_syn_backlog?否则wrk高并发建连时大量连接堆积在SYN_QUEUE,表现为延迟毛刺 - Go程序是否设置了
GOMAXPROCS?容器环境下常被限制为1,导致多核闲置;应设为runtime.NumCPU()或显式os.Setenv("GOMAXPROCS", "auto")
最易被忽略的是:wrk压测时若目标URL带域名(如 http://api.example.com),DNS解析会成为隐性瓶颈——换成 http://127.0.0.1:8080 或提前在 /etc/hosts 绑定,才能测出纯HTTP栈性能。



















