HTTPLoad是一个高性能的HTTP负载测试工具,专为支持超高并发(50万+)连接而设计,能够轻松实现每秒数十万次的请求吞吐量,同时伪装成正常浏览器请求。
从releases下载系统对应的即可
或者直接克隆仓库并编译:
git clone https://cnb.cool/Qicloud_W/httpload.git
cd httpload
go build
./httpload -u "http://example.com" -c 10000 -t 30s
./httpload -u "http://example.com" -c 50000 -t 60s -v -dns-cache -k -nobody
./httpload -u "http://example.com/api/{{.Random}}" -m POST -d '{"id": {{.Number}}}' -content-type "application/json" -c 100000 -t 120s -v -dns-cache -k -nobody -fast
# 使用HTTP代理
./httpload -u "http://example.com" -c 10000 -t 30s -proxy "http://proxy.example.com:8080"
# 使用带认证的HTTP代理
./httpload -u "http://example.com" -c 10000 -t 30s -proxy "http://username:password@proxy.example.com:8080"
# 使用SOCKS5代理
./httpload -u "http://example.com" -c 10000 -t 30s -proxy "socks5://127.0.0.1:1080"
# 使用带认证的SOCKS5代理
./httpload -u "http://example.com" -c 10000 -t 30s -proxy "socks5://username:password@127.0.0.1:1080"
./httpload -u "http://example.com" -c 500000 -t 60s -v -dns-cache -k -nobody -fast -keepalive
| 参数 | 描述 | 默认值 |
|---|---|---|
-u | 测试URL (支持模板) | 必填 |
-m | HTTP方法 (GET/POST/PUT) | GET |
-c | 并发worker数量 | 100 |
-t | 测试持续时间 | 30s |
-d | POST/PUT请求体内容 (支持模板) | 空 |
-content-type | Content-Type头 | application/x-www-form-urlencoded |
-H | 自定义请求头 (格式: 'Header1:Value1,Header2:Value2') | 空 |
-v | 启用实时统计 | false |
-qps | 最大请求速率(每秒请求数),0表示无限制 | 0 |
-dns-cache | 启用DNS解析缓存 | true |
-k | 禁用TLS证书验证 | false |
-min-timeout | 最小请求超时时间 | 500ms |
-max-timeout | 最大请求超时时间 | 10s |
-o | JSON格式输出文件 | 空 |
-keepalive | 启用HTTP keep-alive | true |
-dial-timeout | 连接建立超时时间 | 2s |
-force-exit | 强制退出超时时间 | 10s |
-i | 启用随机公共IP的X-FORWARDED-FOR请求头 | true |
-group-by | 结果分组方式 (none, url, status) | none |
-report | 生成HTML格式报告 | 空 |
-z | 启用gzip压缩请求体 | false |
-nobody | 不读取响应体(提高性能) | true |
-fast | 快速模式(简化请求处理) | true |
-proxy | 代理服务器地址 (http://user:pass@host:port 或 socks5://user:pass@host:port) | 空 |
在URL和请求体中可以使用以下模板变量:
{{.Random}} - 生成随机字符串{{.Number}} - 生成随机数字HTTPLoad针对超高并发场景进行了多项深度优化:
在16核CPU、64GB内存的测试环境下:
| 模式 | 并发数 | QPS | 内存使用 | 适用场景 |
|---|---|---|---|---|
| 标准模式 | 50,000 | 100,000+ | 2GB | 详细性能分析 |
| 快速模式 | 200,000 | 150,000+ | 4GB | 高并发压测 |
| 极速模式 | 500,000 | 200,000+ | 8GB | 极限性能测试 |
在Linux系统上运行高并发测试前,建议执行以下命令:
# 增加文件描述符限制
ulimit -n 2000000
# 增加监听队列长度
sysctl -w net.core.somaxconn=65535
# 增加可用端口范围
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# 启用TIME_WAIT状态的socket重用
sysctl -w net.ipv4.tcp_tw_reuse=1
# 减少FIN_WAIT状态超时时间
sysctl -w net.ipv4.tcp_fin_timeout=30
# 增加网络设备队列长度
sysctl -w net.core.netdev_max_backlog=5000
# 优化TCP内存参数
sysctl -w net.ipv4.tcp_mem="786432 1048576 1572864"
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
sysctl -w net.ipv4.tcp_slow_start_after_idle=0
=== 测试结果 === 持续时间: 60.02秒 总请求数: 9,712,012 成功: 9,698,456 (99.86%) 失败: 13,556 (0.14%) QPS: 161,813.1 请求/秒 延迟分布: 平均值: 0.123秒 最小值: 0.001秒 最大值: 1.998秒 P50: 0.050秒 P90: 0.200秒 P95: 0.500秒 P99: 0.800秒 状态码分布: 200: 9,698,456 (99.86%) 503: 13,556 (0.14%) ================
选择合适的模式
-nobody系统优化
# Linux系统优化脚本
ulimit -n 2000000
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.core.somaxconn=65535
参数组合建议
# 极致性能组合(50万并发)
./httpload -u "http://target.com" -c 500000 -t 60s \
-dns-cache -k -nobody -fast -keepalive \
-min-timeout 500ms -v
MIT
欢迎提交问题和拉取请求!