C++ WebServer / 12
压测与优化:用 ApacheBench 验证性能
提交记录中记录过 ab 压测:WARN 日志级别下,ab -n 200000 -c 1000 -k,RPS 约 25k,失败请求为 0。压测让优化有数据依据。
这一阶段要解决什么问题
服务器看起来能跑不代表能扛并发。压测要观察吞吐、延迟、失败请求、CPU、内存和 fd 使用情况。
原来的实现有什么缺陷
没有压测时,只能靠主观感觉判断性能。尤其是 Keep-Alive、非阻塞写、线程池和日志等级的影响,很难凭肉眼判断。
我是怎么改的
使用 ApacheBench 构造固定场景,指定总请求数、并发数和 Keep-Alive,记录 RPS 和失败请求。压测结果只代表当前机器和当前场景,不等同于生产环境性能。
核心代码 / 关键逻辑
ab -n 200000 -c 1000 -k http://127.0.0.1:8080/
-n: 总请求数
-c: 并发数
-k: 开启 Keep-Alive提交记录:LogLevel 为 WARN 时,RPS 约 25k,Failed requests 为 0。
踩坑记录
压测容易“测到日志”而不是测到服务器。如果日志级别太低、每个请求都同步写日志,结果会被 I/O 干扰,所以压测时要说明日志级别和测试资源。