logo
1
0
Login
添加代理支持,允许通过HTTP和SOCKS5代理进行请求

HTTPLoad - 超高并发HTTP负载测试工具

技术无罪,但要遵守法律法规

HTTPLoad是一个高性能的HTTP负载测试工具,专为支持超高并发(50万+)连接而设计,能够轻松实现每秒数十万次的请求吞吐量,同时伪装成正常浏览器请求。

特性

  • 超高并发支持:可同时处理500,000+并发连接,单机极限性能
  • 极致性能:优化的内存和CPU使用,可达到200,000+ QPS
  • 浏览器请求伪装:随机化User-Agent、Accept、Accept-Language等头,模拟真实浏览器行为
  • 网络级优化:Socket级别优化,包括端口重用、连接池优化等
  • 灵活配置:支持多种HTTP方法、自定义请求头、请求体等
  • 实时监控:提供实时统计信息,包括QPS、成功率、内存使用等
  • 详细报告:测试完成后提供详细的统计报告,包括延迟分布、状态码分布等
  • 模板支持:URL和请求体支持模板,可动态生成测试数据
  • 系统优化:自动调整系统参数以支持超高并发
  • 资源节约:使用对象池和其他优化技术减少内存分配和GC压力

安装

从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"

极速模式(最高性能,支持50万并发)

./httpload -u "http://example.com" -c 500000 -t 60s -v -dns-cache -k -nobody -fast -keepalive

命令行参数

参数描述默认值
-u测试URL (支持模板)必填
-mHTTP方法 (GET/POST/PUT)GET
-c并发worker数量100
-t测试持续时间30s
-dPOST/PUT请求体内容 (支持模板)
-content-typeContent-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
-oJSON格式输出文件
-keepalive启用HTTP keep-alivetrue
-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针对超高并发场景进行了多项深度优化:

1. 系统级优化

  • GOMAXPROCS调优:自动设置为CPU核心数的4-8倍,优化IO密集型任务
  • GC优化:设置GC百分比为800-1000,大幅减少GC频率
  • 内存预分配:预分配内存,减少运行时分配开销
  • 线程池优化:支持最多200,000个系统线程

2. 网络级优化

  • 连接池优化:最大1,000,000空闲连接,每主机200,000连接
  • DNS缓存:内置高效DNS缓存,支持多IP负载均衡
  • 连接复用:300秒长连接保活,最大化连接复用
  • 连接预热:智能预热连接池,减少启动延迟

3. 并发架构优化

  • 分批启动:智能分批启动工作协程,避免系统过载
  • 多生产者模式:使用多个任务生产者,提高任务分发效率
  • 工作池模式:高效的工作池管理,减少协程创建开销
  • 错误控制:智能错误处理,避免错误雪崩

4. 内存优化

  • 对象池:广泛使用sync.Pool减少内存分配
  • 零拷贝:尽可能避免不必要的内存拷贝
  • 缓冲区复用:请求缓冲区复用,减少GC压力
  • 内存监控:实时监控内存使用情况

5. 请求伪装优化

  • 随机User-Agent:模拟各种浏览器的User-Agent
  • 随机Accept头:模拟浏览器的Accept头
  • 随机Accept-Language:模拟不同语言设置
  • 随机Accept-Encoding:模拟不同编码支持
  • 随机IP伪装:通过X-Forwarded-For和X-Real-IP头模拟不同来源IP

性能基准

在16核CPU、64GB内存的测试环境下:

模式并发数QPS内存使用适用场景
标准模式50,000100,000+2GB详细性能分析
快速模式200,000150,000+4GB高并发压测
极速模式500,000200,000+8GB极限性能测试

Linux系统优化建议

在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%) ================

最佳实践

性能调优建议

  1. 选择合适的模式

    • 详细分析:使用标准模式
    • 高并发压测:使用快速模式 + -nobody
    • 极限测试:使用极速模式 + 所有优化参数
  2. 系统优化

    # 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
  3. 参数组合建议

    # 极致性能组合(50万并发) ./httpload -u "http://target.com" -c 500000 -t 60s \ -dns-cache -k -nobody -fast -keepalive \ -min-timeout 500ms -v

监控指标

  • QPS:每秒请求数,衡量吞吐量
  • 成功率:请求成功百分比,衡量稳定性
  • 延迟分布:P50、P90、P95、P99延迟
  • 内存使用:监控内存消耗,避免OOM
  • 协程数量:监控协程泄漏

注意事项

未经授权的任何压测行为均为违法行为,如您未获批授权进行压测行为,所产生的一切法律责任归于使用者!

  1. 合法使用:高并发测试可能会对目标服务器造成压力,请确保您有权限进行测试。
  2. 环境验证:在生产环境中使用前,请先在测试环境中验证
  3. 资源准备:超高并发测试可能会消耗大量系统资源,请确保您的测试机器有足够的资源
  4. 网络带宽:确保网络带宽足够支持高并发测试
  5. 目标服务器:注意目标服务器的承载能力,避免造成服务中断

许可证

MIT

贡献

欢迎提交问题和拉取请求!