- 知识
webbench压力测试
时间:2010-12-5 17:23:32 作者:热点 来源:焦点 查看: 评论:0
内容摘要:Webbench压测,我第一反应是那台嗡嗡作响的老旧服务器。三年前给一个电商客户做上线前检查,他们坚持用Apache自带的ab工具测。结果呢?首页接口扛到500并发就崩了,返回的HTML页面一半是乱码
Webbench压测,压力我第一反应是测试那台嗡嗡作响的老旧服务器。三年前给一个电商客户做上线前检查,压力他们坚持用Apache自带的测试ab工具测。结果呢?压力首页接口扛到500并发就崩了,返回的测试HTML页面一半是乱码。后来换成webbench,压力同样的测试机器,硬是压力顶到1500并发才出现连接超时。差距不是测试一点半点,是压力量级上的碾压。 webbench这工具,测试说穿了就两把刷子:fork子进程和socket连接。压力你运行`./webbench -c 100 -t 30 http://target.com`,测试它瞬间fork出100个子进程,压力每个进程独立建立连接,30秒内疯狂发送HTTP请求。没有复杂的分布式架构,没有花哨的图形界面,就是纯粹的暴力压测。这恰恰是它的魅力——简单到极致,反而能暴露真实瓶颈。 我见过太多人误解压测的意义。他们以为压测就是看服务器能撑多少并发,其实那是给运维看热闹的。真正的价值在于观察响应时间曲线的拐点。上次压一个Node.js写的API服务,webbench输出显示:200并发时平均响应120ms,500并发时飙到890ms,1000并发直接超时。那个拐点就是系统从健康到崩溃的分水岭。你调整了数据库连接池大小,再跑一遍,拐点右移了,这才是有效的优化验证。 但webbench有个致命短板——它只测静态负载。所有请求都是同样的URL,同样的请求头,没有登录态,没有随机参数。这在真实场景里就是耍流氓。你压一个需要鉴权的接口,webbench发出去的请求全被401拦截,测出来的是网关的拒绝能力,不是业务逻辑的处理能力。所以我的习惯是先用webbench摸清服务器底层的极限吞吐,再用JMeter模拟复杂业务流。两者配合,才算完整。 还有个小细节,webbench默认不处理Keep-Alive。每次请求都新建TCP连接,这在高并发下会放大TIME_WAIT状态的端口消耗。压测结束后,你用`netstat -an | grep TIME_WAIT`看看,满屏的等待连接。这不是bug,是工具特性。你要测长连接场景,得自己改源码或者换工具。但反过来想,这种“最坏情况”的压测反而能帮你提前发现端口耗尽的风险。 我建议新手别急着上生产环境压测。先在本地起个最简单的Nginx静态页,用webbench跑一下,观察CPU、内存、文件描述符的变化。你会看到fork进程瞬间把CPU打到100%,然后慢慢回落——那是内核在调度。等你熟悉了这个过程,再去碰真实业务,心里就有底了。压测不是数字游戏,是对系统的深度体检。webbench只是那根最粗的探针,能不能刺到痛点,还得看你怎么用。