Hey+cron定时巡检:让在线服务的性能巡逻自动化运行
【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey
hey 是一款轻量级HTTP 负载生成器(HTTP load generator),定位是 ApacheBench(ab)的替代工具。它用一行命令就能向 Web 服务施压并输出完整的性能统计(平均/最快/最慢响应、RPS、DNS 与连接耗时、状态码分布)。把它和 Linux 的cron 定时任务组合起来,就能实现零成本的"性能巡逻":定时、定量、自动记录,让在线服务的性能劣化在用户抱怨之前就暴露出来。🛡️
为什么选 hey 做性能巡检
对新手来说,hey 的门槛低到几乎没有:
- 单二进制、跨平台:Linux / macOS / Windows 都有构建产物,跨平台构建逻辑见 Makefile,容器化部署见 Dockerfile
- 一条命令即出报表:默认发送 200 次请求、50 并发(默认值定义在 hey.go)
- 统计开箱即用:平均响应时间、RPS、DNS/连接/请求/响应各阶段耗时、状态码分布,统计模型实现在 requester/report.go,终端渲染在 requester/print.go
- 能力不缩水:支持 POST 等任意方法、自定义 Header、Basic 认证、HTTP/2、QPS 限速,参数说明见 README.md
对"巡检"这种周期性、轻负载的场景,它比重量级压测框架更合适:不装依赖、不占内存、输出可被csv落盘。
一键安装步骤
macOS(Homebrew 用户):
brew install hey任意平台(从源码构建):
git clone https://gitcode.com/GitHub_Trending/he/hey cd hey go build -o hey .构建后把hey放到PATH目录(如/usr/local/bin)即可,cron 里调用更方便。
三条命令上手巡检
参数文档可直接查看 hey.go 内置的 usage 文本,巡检最常用的只有三个参数:
# ① 对健康检查端点压 30 秒(巡检主力命令) hey -z 30s https://your-service.com/health # ② 控制压力:10 并发、200 次请求 hey -n 200 -c 10 -z 30s https://your-service.com/ # ③ 输出 CSV 落盘,方便趋势分析 hey -z 30s -o csv https://your-service.com/ > result.csv-z:持续时长(如10s、3m),到点自动停止,巡检首选-c:并发数,巡检场景建议10~20,别把生产环境压崩-q:每个 worker 的 QPS 限速,对敏感接口加一层保险-t:单请求超时秒数(默认 20),防止慢请求拖垮巡检-m POST -d "...":巡检写接口时使用;-a user:pass处理 Basic 认证
编写巡检脚本:把结果存成证据链
把上面命令包一层脚本,让每次巡检的"证据"都有时间戳:
#!/bin/bash # /opt/hey-patrol/patrol.sh mkdir -p /var/log/hey ts=$(date +%F_%H%M) hey -z 30s -o csv https://your-service.com/health > /var/log/hey/hey_$ts.csv echo "$ts $(tail -n +2 /var/log/hey/hey_$ts.csv | head -n 1)" >> /var/log/hey/summary.log💡 提示:CSV 中每一行是一次请求的指标,配合表格软件或监控系统导入后,就能画出响应时间趋势图,性能回退一目了然。
日志建议用logrotate或定期任务保留 30 天,避免磁盘被巡检数据占满。
cron 定时任务配置:最快配置方法
执行crontab -e,按巡检粒度加入以下任意一条:
*/5 * * * * /opt/hey-patrol/patrol.sh # 每 5 分钟巡逻一次(高频哨兵) 0 * * * * /opt/hey-patrol/patrol.sh # 每小时巡检 0 8 * * * /opt/hey-patrol/patrol.sh # 每天 8 点晨检配置要点:
- 5 个字段依次为分、时、日、月、星期,新手从
*/5高频档起步,确认无告警后可降频 - 脚本里一律使用绝对路径(cron 环境下
PATH很精简) - 巡检窗口避开业务高峰,或对非核心端点(
/health)巡检,降低误伤风险 ⏰
巡检数据怎么用
每次执行后,hey 会打印一份人类可读的摘要(渲染逻辑见 requester/print.go,请求执行核心见 requester/requester.go):
| 指标 | 巡检时关注什么 |
|---|---|
| Average response time | 与历史基线对比,明显抬升即劣化 |
| Slowest request | 毛刺探测,超过正常值 2~3 倍要警惕 |
| RPS | 是否显著低于预期并发,可能被限流或阻塞 |
| 状态码分布 | 出现 5xx/超时即视为故障信号 |
| 错误分布 | 连接失败、DNS 失败等网络层问题 |
建议给每个端点设两条红线:错误率 > 1%或最慢请求超基线 3 倍,触发时推送告警,巡逻才算闭环。✅
巡检最佳实践清单
- 定基线:先手动跑几次记录正常值,巡检告警才有参照物
- 控压力:
-c 10、-q 5起步,生产环境宁小勿大 - 盯关键路径:登录、下单、核心 API 各配一条巡检
- 留痕迹:CSV 落盘 + 摘要日志,是事后复盘的第一手资料
- 限超时:始终带上
-t,避免一次慢响应拖慢整个巡检周期
附:项目文件速查
| 文件 | 说明 |
|---|---|
| hey.go | 主程序:参数定义、用法说明、执行入口 |
| requester/requester.go | 请求发送与并发控制核心 |
| requester/report.go | 统计聚合:平均/最快/最慢、RPS、错误分布 |
| requester/print.go | 终端报表渲染(含延迟分布图) |
| Makefile | 三平台交叉构建脚本 |
| go.mod | 依赖与模块定义 |
| README.md | 完整参数文档与示例 |
hey 本体只有 200 多行主代码,配合 cron 这个系统自带调度器,你得到的是一条零依赖、可审计、随时可回滚的自动化性能巡逻流水线——从今天起,让服务的质量问题在凌晨 3 点被发现,而不是在客户群里被发现。
【免费下载链接】heyHTTP load generator, ApacheBench (ab) replacement项目地址: https://gitcode.com/GitHub_Trending/he/hey
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考