benchmark/

directory
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2025 License: MIT

README

SOCKS5 代理服务器性能测试方案

概述

本测试套件用于评估 SOCKS5 代理服务器的性能表现,包括吞吐量、并发处理能力、延迟和稳定性等关键指标。

测试架构

[测试客户端] --SOCKS5--> [代理服务器] --TCP/HTTP--> [测试目标服务器]

测试组件

1. 测试目标服务器 (test-server.go)

提供多种测试端点的HTTP和TCP服务器:

HTTP端点:

  • /health - 健康检查
  • /echo - 回显测试(返回接收到的数据)
  • /download?size=N - 下载测试(返回指定大小的随机数据)
  • /upload - 上传测试(接收数据但不返回)
  • /delay?ms=N - 延迟测试(模拟指定毫秒的延迟)
  • /stats - 统计信息(返回服务器运行统计)

TCP服务器:

  • 回显服务器,返回接收到的所有数据
2. 性能测试客户端 (proxy-test.go)

实现完整的SOCKS5客户端和多种测试场景:

测试类型:

  • HTTP性能测试
  • TCP性能测试
  • 吞吐量测试
  • 完整测试套件

性能测试指标

核心指标
  • 吞吐量 (Throughput): 每秒处理的数据量 (MB/s)
  • 请求率 (RPS): 每秒处理的请求数
  • 并发连接数: 同时处理的连接数量
  • 延迟 (Latency): 请求响应时间
    • 最小延迟
    • 最大延迟
    • 平均延迟
    • 95% 百分位延迟
    • 99% 百分位延迟
  • 错误率: 失败请求占总请求的百分比
资源使用指标
  • CPU 使用率
  • 内存使用量
  • 网络带宽使用
  • 文件描述符使用

测试场景

1. 基础性能测试
  • 目标: 评估基本的代理转发能力
  • 配置:
    • 并发数: 10, 50, 100
    • 数据包大小: 1KB
    • 测试时间: 30秒
  • 协议: HTTP POST (echo端点)
2. 高并发测试
  • 目标: 评估高并发场景下的性能表现
  • 配置:
    • 并发数: 100, 500, 1000
    • 数据包大小: 1KB
    • 测试时间: 60秒
  • 协议: HTTP 和 TCP
3. 大数据包测试
  • 目标: 评估大数据传输的性能
  • 配置:
    • 并发数: 50
    • 数据包大小: 1KB, 10KB, 100KB, 1MB
    • 测试时间: 30秒
  • 协议: TCP (保持连接)
4. 吞吐量测试
  • 目标: 评估最大数据传输能力
  • 配置:
    • 并发数: 20
    • 数据包大小: 1MB, 10MB
    • 测试时间: 60秒
  • 协议: HTTP (下载端点)
5. 延迟测试
  • 目标: 评估代理引入的延迟开销
  • 配置:
    • 并发数: 1, 10
    • 数据包大小: 64B, 1KB
    • 测试时间: 30秒
  • 对比: 直连 vs 代理
6. 稳定性测试
  • 目标: 评估长时间运行的稳定性
  • 配置:
    • 并发数: 100
    • 数据包大小: 1KB
    • 测试时间: 10分钟
  • 监控: 内存泄漏、连接泄漏

使用方法

1. 启动测试目标服务器
# 编译测试服务器
go build -o test-server tests/benchmark/test-server.go

# 启动服务器 (HTTP端口8080, TCP端口8081)
./test-server -http-port=8080 -tcp-port=8081
2. 启动SOCKS5代理服务器
# 启动你的SOCKS5代理服务器,例如:
# ./ezvpn-agent -local=":1080" -server="your-server:8443" -auth="your-key"
3. 运行性能测试
# 编译测试客户端
go build -o proxy-test tests/benchmark/proxy-test.go

# 运行完整测试套件
./proxy-test -proxy="127.0.0.1:1080" -target="127.0.0.1:8080" -type="suite"

# 运行单项测试
./proxy-test -proxy="127.0.0.1:1080" -target="127.0.0.1:8080" -type="http" -concurrency=100 -duration=60s -data-size=1024

# TCP测试
./proxy-test -proxy="127.0.0.1:1080" -target="127.0.0.1:8081" -type="tcp" -concurrency=50 -duration=30s -data-size=1024 -keep-alive=true

# 吞吐量测试
./proxy-test -proxy="127.0.0.1:1080" -target="127.0.0.1:8080" -type="throughput" -concurrency=20 -duration=60s -data-size=1048576
4. 参数说明

test-server 参数:

  • -http-port: HTTP服务器端口 (默认: 8080)
  • -tcp-port: TCP服务器端口 (默认: 8081)
  • -stats: 是否打印统计信息 (默认: true)

proxy-test 参数:

  • -proxy: SOCKS5代理地址 (默认: 127.0.0.1:1080)
  • -target: 目标服务器地址 (默认: 127.0.0.1:8080)
  • -type: 测试类型 (http/tcp/throughput/suite)
  • -concurrency: 并发连接数 (默认: 50)
  • -duration: 测试持续时间 (默认: 30s)
  • -data-size: 数据包大小,字节 (默认: 1024)
  • -keep-alive: TCP测试是否保持连接 (默认: false)

测试结果分析

性能基准参考

优秀性能指标:

  • HTTP RPS: > 10,000 req/s (1KB数据包, 100并发)
  • TCP RPS: > 15,000 req/s (1KB数据包, 100并发)
  • 吞吐量: > 100 MB/s (大文件传输)
  • 平均延迟: < 10ms (局域网环境)
  • 99%延迟: < 50ms
  • 错误率: < 0.1%

资源使用基准:

  • CPU使用率: < 80% (高负载时)
  • 内存使用: 稳定,无明显增长趋势
  • 文件描述符: 无泄漏
性能瓶颈分析
  1. CPU瓶颈: 高CPU使用率,低吞吐量
  2. 内存瓶颈: 内存使用持续增长
  3. 网络瓶颈: 网络带宽达到上限
  4. 连接瓶颈: 连接数达到系统限制
优化建议
  1. 连接池优化: 复用连接,减少握手开销
  2. 缓冲区优化: 调整读写缓冲区大小
  3. 协程池优化: 控制协程数量,避免过度创建
  4. 内存优化: 及时释放资源,避免内存泄漏

监控和调试

系统监控
# 监控CPU和内存使用
top -p $(pgrep proxy-server)

# 监控网络连接
netstat -an | grep :1080

# 监控文件描述符
lsof -p $(pgrep proxy-server) | wc -l
性能分析
# 启用pprof (如果代理服务器支持)
go tool pprof http://localhost:6060/debug/pprof/profile

# 内存分析
go tool pprof http://localhost:6060/debug/pprof/heap

注意事项

  1. 网络环境: 确保测试在稳定的网络环境中进行
  2. 系统资源: 确保测试机器有足够的CPU、内存和网络带宽
  3. 防火墙: 确保相关端口未被防火墙阻止
  4. 系统限制: 检查系统的文件描述符限制 (ulimit -n)
  5. 测试隔离: 避免其他程序干扰测试结果
  6. 多次测试: 进行多次测试取平均值,确保结果可靠

故障排除

常见问题
  1. 连接被拒绝: 检查代理服务器和目标服务器是否正常运行
  2. 认证失败: 检查SOCKS5代理的认证配置
  3. 超时错误: 调整超时时间或检查网络延迟
  4. 内存不足: 减少并发数或增加系统内存
  5. 端口冲突: 更换测试端口
调试步骤
  1. 检查服务器日志
  2. 使用tcpdump抓包分析
  3. 逐步降低测试强度
  4. 检查系统资源使用情况

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL