Files
v-hono/docs/HIGH_CONCURRENCY.md
T
meiseayoung 9eb360926b feat(usockets): optimize high concurrency support up to 10,000+ connections
- Increase uSockets listen() backlog from 512 to 16384 in bsd.c
- Add high concurrency test suite (5000-10000 concurrent connections)
- Add HIGH_CONCURRENCY.md documentation with optimization guide
- Add usockets/build.sh script for rebuilding uSockets library
- Update README with latest benchmark results

Performance (macOS M3 Max):
- 5,000 concurrent: 81,524 RPS, 100% success
- 10,000 concurrent: 24,198 RPS, 100% success

System requirements:
- kern.ipc.somaxconn >= 8192
- ulimit -n 65535
2026-01-03 20:45:30 +08:00

3.1 KiB
Raw Blame History

v-hono 高并发优化指南

概述

v-hono 使用 uSockets 作为高性能网络后端,经过优化后可以稳定支持 10,000+ 并发连接。

性能测试结果

并发数 RPS 平均延迟 P99延迟 成功率
5,000 81,524 60.77ms 295.17ms 100%
6,000 56,290 98.46ms 557.47ms 100%
7,000 42,895 130.04ms 824.80ms 100%
8,000 30,537 165.27ms 1058.05ms 100%
9,000 28,693 215.86ms 1422.67ms 100%
10,000 24,198 240.90ms 1602.10ms 100%

测试环境:macOS (Apple Silicon M3 Max)

重要提示:每次测试后需等待 60 秒让 TIME_WAIT 连接释放,否则会影响下一次测试结果。

关键优化

1. uSockets backlog 参数

原始 uSockets 库的 listen() backlog 参数硬编码为 512,限制了高并发能力。

修复位置:v-hono/usockets/src/bsd.c (第 532 行和第 578 行)

// 修改前
listen(listenFd, 512)

// 修改后
listen(listenFd, 16384)

修改后的源码保存在 v-hono/usockets/src/bsd.c,编译后的库文件在 v-hono/lib/libusockets_full.a。

重新编译:运行 v-hono/usockets/build.sh 脚本。

2. 系统参数配置

macOS 需要调整以下系统参数:

# 查看当前值
sysctl kern.ipc.somaxconn

# 临时修改(重启后失效)
sudo sysctl -w kern.ipc.somaxconn=8192

# 永久修改(添加到 /etc/sysctl.conf)
kern.ipc.somaxconn=8192

注意:实际 backlog 值会被 kern.ipc.somaxconn 截断,所以系统参数也需要相应调整。

重新编译 uSockets(可选)

如果需要自定义 backlog 值,可以重新编译 uSockets:

# 1. 克隆 uSockets
git clone https://github.com/uNetworking/uSockets.git

# 2. 修改 src/bsd.c 中的 listen 调用
# 将 listen(listenFd, 512) 改为 listen(listenFd, 16384)

# 3. 编译(macOS with libuv)
WITH_LIBUV=1 CFLAGS="-I/opt/homebrew/include" make

# 4. 复制到 v-hono
cp uSockets.a /path/to/v-hono/lib/libusockets_full.a

# 5. 重新编译 v-hono 应用
v -enable-globals -prod -o your_app your_app.v

使用建议

  1. 生产环境:建议使用 uSockets 后端(app.listen_usockets(port))
  2. 系统调优:确保 kern.ipc.somaxconn >= 8192
  3. 文件描述符:服务器和客户端都需要设置 ulimit -n 65535
  4. 启动命令:ulimit -n 65535 && ./your_server

高并发测试

运行高并发测试:

# 启动服务器
ulimit -n 65535 && ./bench_server_usockets

# 运行测试 (5000-10000 并发)
ulimit -n 65535 && go run v-hono/tests/test_high_concurrency.go

# 单独测试某个级别
ulimit -n 65535 && go run v-hono/tests/test_high_concurrency.go 8000

问题排查

如果高并发测试失败,检查:

  1. 服务器是否正常响应:curl http://localhost:8080/health
  2. 系统参数:sysctl kern.ipc.somaxconn
  3. 文件描述符限制:ulimit -n
  4. 测试客户端是否有端口耗尽问题

版本信息

  • uSockets backlog: 16384
  • 测试日期: 2026-01-03
  • 测试通过最大并发: 10,000(不使用渐进式启动)