上线前总得看看接口扛不扛得住大促流量,半夜收到告警说响应变慢,第一反应不是重启服务,而是先跑个压测——这事儿干过吧?HTTP压力测试工具就是咱们网络运维日常摸底、调优、排障时最直接的“探针”。
ab:简单粗暴,够用就完事
Apache Bench(ab)自带在大多数Linux发行版里,不用装,敲两行命令就能开干。比如想测一下登录接口在100并发下扛多久:
ab -n 1000 -c 100 http://api.example.com/login它会立刻吐出请求完成时间、失败率、QPS这些关键数字。适合快速验证单点瓶颈,比如发现某个参数没加索引,响应时间从20ms飙到800ms,一眼就揪出来。wrk:轻量但能打,脚本也灵活
wrk比ab更现代,支持Lua脚本,能模拟真实用户行为。比如要带Cookie和随机User-Agent发请求:
wrk -t4 -c100 -d30s -s auth.lua http://api.example.com/order其中auth.lua里可以写登录获取token、再拿token调下单接口的逻辑。小团队做API网关压测或灰度验证,wrk经常是首选。JMeter:图形界面+分布式,适合复杂场景
要是需要跑完整业务链路——比如用户注册→上传头像→发第一条动态→触发消息推送,JMeter的可视化操作就派上用场了。它还能导出HTML报告,TP90、错误趋势图一目了然。配合后端部署几台slave机器,轻松模拟几千并发。不过别在生产数据库旁边跑全量SQL压测,真有同事这么干过,第二天DBA找上门来聊人生。
hey:Go写的,启动快,日志干净
hey是Go语言写的轻量工具,macOS/Linux一键下载即用。对容器环境友好,Docker里起个临时压测容器特别顺手:
docker run --rm raviqqe/hey -z 30s -q 50 http://nginx:8080/health输出默认是简洁文本,也支持JSON格式,方便管道进awk或jq处理。日常巡检健康接口、CI流程中做冒烟压测,用它省心。工具没有高低,只有合不合适。ab用来查单接口,wrk搞带逻辑的API流,JMeter跑端到端,hey塞进流水线——选哪个,其实就看今晚要不要加班看监控。