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% (高负载时)
- 内存使用: 稳定,无明显增长趋势
- 文件描述符: 无泄漏
性能瓶颈分析
- CPU瓶颈: 高CPU使用率,低吞吐量
- 内存瓶颈: 内存使用持续增长
- 网络瓶颈: 网络带宽达到上限
- 连接瓶颈: 连接数达到系统限制
优化建议
- 连接池优化: 复用连接,减少握手开销
- 缓冲区优化: 调整读写缓冲区大小
- 协程池优化: 控制协程数量,避免过度创建
- 内存优化: 及时释放资源,避免内存泄漏
监控和调试
系统监控
# 监控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
注意事项
- 网络环境: 确保测试在稳定的网络环境中进行
- 系统资源: 确保测试机器有足够的CPU、内存和网络带宽
- 防火墙: 确保相关端口未被防火墙阻止
- 系统限制: 检查系统的文件描述符限制 (
ulimit -n) - 测试隔离: 避免其他程序干扰测试结果
- 多次测试: 进行多次测试取平均值,确保结果可靠
故障排除
常见问题
- 连接被拒绝: 检查代理服务器和目标服务器是否正常运行
- 认证失败: 检查SOCKS5代理的认证配置
- 超时错误: 调整超时时间或检查网络延迟
- 内存不足: 减少并发数或增加系统内存
- 端口冲突: 更换测试端口
调试步骤
- 检查服务器日志
- 使用tcpdump抓包分析
- 逐步降低测试强度
- 检查系统资源使用情况
Click to show internal directories.
Click to hide internal directories.