112 MB
服务端内存 (RES)
~20 MB / 万设备
2.5 GB
压测机内存 (RES)
~50 KB / 设备
1. 概述
测试目标:验证 GBHub 国标视频平台(gbhub-sip)在大规模设备接入下的注册、保活和实时点播能力。
测试工具:gbhub-stress v0.1.0,基于 Rust/Tokio 开发,模拟 50,000 个 GB/T 28181 设备。
2. 测试环境
2.1 硬件配置
| 角色 | 配置 |
| 压测机 (gbhub-stress) | Intel Celeron N5105 @ 2.00GHz (4 核),4 GB 内存 |
| 服务端 (gbhub-sip) | Intel Celeron N5105 @ 2.00GHz (4 核),4 GB 内存 |
| 网络 | 千兆以太网,同网段 (192.168.28.x) |
2.2 软件版本
| 组件 | 版本 |
| Rust | 1.80+ |
| ZLMediaKit | 最新稳定版 |
| Valkey | 7.2+ |
| GreptimeDB | 1.1.4+ |
| gbhub-sip | 最新版 |
2.3 压测工具参数
| 参数 | 取值 |
| 设备数量 | 50,000 |
| 起始端口 | 10,000 |
| 设备 ID 前缀 | 3402000000 |
| 心跳间隔 | 30 秒 |
| 注册有效期 | 3,600 秒 |
3. 测试场景与执行过程
3.1 场景一:设备注册与保活(核心测试)
- 启动 gbhub-stress,模拟 50,000 个设备向上级平台发起注册。
- 观察注册成功率、注册完成时间。
- 持续运行,观察心跳保活稳定性。
执行结果:工具启动后,50,000 个设备在 < 2 秒 内全部完成注册,之后持续稳定发送心跳。
3.2 场景二:实时点播(INVITE)
- 在上级平台手动触发部分设备点播。
- 观察 INVITE 请求响应和媒体流建立情况。
执行结果:上级平台向设备发送 INVITE 请求,gbhub-stress 返回 200 OK,并通过 ZLM 推送固定流,媒体流正常建立。
4. 测试结果
4.1 注册与保活
| 指标 | 结果 | 评价 |
| 设备总数 | 50,000 | ✅ |
| 注册成功数 | 50,000 | ✅ 100% |
| 注册完成时间 | < 2 秒 | ✅ 优秀 |
| 心跳成功率 | 100% | ✅ 稳定 |
| 运行期间掉线 | 0 | ✅ 无掉线 |
4.2 CPU 资源监控(服务端 gbhub-sip)
| 阶段 | CPU 使用率 | 说明 |
| 空闲状态(无负载) | ~0% | 无任何设备在线,服务端空闲 |
| 注册峰值(5万设备上线) | ~200% (2 核满载) | 瞬发,持续约 1-2 秒 |
| 心跳稳态(5万设备保活) | ~0% | 定时心跳,CPU 消耗极低 |
| 点播 (少量 INVITE) | 基本无影响 | 额外增加 < 10% |
📌 说明:服务端在空闲时 CPU 几乎为 0%,证明系统无后台任务或轮询消耗。心跳稳态时 CPU 也极低,说明定时任务(epoll 超时唤醒)开销极小。
4.3 内存监控
服务端 (gbhub-sip)
| 指标 | 结果 |
| 进程物理内存 (RES) | ~112 MB |
| 内存占比 | 2.9% |
| 增长趋势 | 与设备数线性相关,每万设备约 20 MB |
压测工具 (gbhub-stress)
| 指标 | 结果 |
| 进程物理内存 (RES) | 2.5 GB |
| 内存占比 | 69.3% |
| 平均每设备内存 | ~50 KB |
📌 说明:压测工具内存消耗主要源于每个设备独立的 UDP Socket、Tokio 任务栈及 SipState 数据结构。50,000 设备占用 2.5 GB。
4.4 压测工具监控
| 指标 | 结果 |
| 压测机 CPU(空闲) | ~0% |
| 压测机 CPU(运行时) | 约 2-3% |
| 压测机内存 | 2.5 GB (5万设备) |
| UDP 端口占用 | 10,000 ~ 59,999 |
4.5 统计输出示例
========== GBHub-Stress 压测统计 ==========
已注册设备数: 50000/50000 (100.00%)
总 INVITE 请求数: 6
涉及设备数: 4
==========================================
5. 性能分析
5.1 注册性能
| 指标 | 数值 |
| 注册吞吐量 | ~25,000 设备/秒 |
| 平均注册延迟 | < 40 ms/设备 |
| 并发能力 | 50,000 设备同时上线无压力 |
5.2 心跳性能
| 指标 | 数值 |
| 心跳间隔 | 30 秒 |
| 心跳包速率 | ~1,667 包/秒 (5万设备) |
| 心跳包大小 | 约 500 字节 |
5.3 系统资源瓶颈预测
| 资源 | 5万设备 | 10万设备预测 |
| 服务端 CPU (峰值) | 200% | ~300% (未饱和) |
| 服务端 CPU (稳态) | ~0% | ~0-1% |
| 服务端内存 | 112 MB | ~200 MB |
| 压测机内存 | 2.5 GB | ~5 GB |
| 压测机端口 | 50,000 | 100,000 (需多 IP) |
5.4 工具限制
- 单 IP 最大可模拟设备数受 UDP 端口范围限制(约 64,000)。
- 超过 65,000 设备需绑定多个 IP 地址或分布式部署。
- 压测机内存是主要瓶颈,建议 ≥ 8 GB 以支持 8-10 万设备。
6. 问题与优化
6.1 已发现并解决的问题
| 问题 | 描述 | 解决方案 |
| SIP 响应误判 | 工具将 SIP 响应 (200 OK) 当作请求处理,回复 501 | 增加响应检测分支,提前返回 |
| 目录查询失败 | Catalog 响应编码不一致导致上级无法识别通道 | 使用 encode_xml 统一编码,确保 Content-Length 精确 |
| 媒体流未建立 | 被动模式逻辑错误,双方都在等待 | 修正 INVITE 处理逻辑,上级被动时下级主动推流 |
| 无关流量干扰 | 非上级 IP 的 UDP 包导致日志刷屏 | 增加 IP 白名单过滤,静默忽略 |
6.2 性能优化建议
| 建议 | 说明 |
| 调整心跳间隔 | 可设置 HEARTBEAT_INTERVAL=60 降低心跳频率 |
| 使用 mimalloc | 高并发场景可提升 15-30% 性能,但内存优化效果有限 |
| 编译优化 | Release 模式开启 LTO 和 codegen-units=1 |
| 减少日志 | RUST_LOG=warn 降低日志 I/O |
| 调整系统参数 | ulimit -n 655350,调整 UDP 缓冲区 |
| 压测机内存扩容 | 若计划模拟 ≥ 8 万设备,建议内存 ≥ 8 GB |
7. 结论
✅ 测试结论
- GBHub 级联平台在 50,000 设备并发注册和保活场景下运行稳定。
- 注册成功率 100%,注册完成时间 < 2 秒,性能优异。
- 心跳保活稳定,设备不掉线,无明显资源泄漏。
- 实时点播(INVITE)功能正常,能够正确响应上级的拉流请求并推送媒体流。
- 服务端资源占用合理:空闲 CPU ~0%,峰值 200%(2 核),稳态 0%;内存约 112 MB。
- 压测工具内存占用较大(2.5 GB / 50k 设备),需关注大规模测试时的内存限制。
后续建议
| 方向 | 建议 |
| 继续加压 | 若压测机内存 ≥ 8 GB,可逐步提升至 10 万设备 |
| 内存优化 | 优化压测工具的内存使用,或升级压测机内存 |
| 分布式压测 | 超过 6.4 万设备可启用多 IP 绑定或分布式部署 |
| 性能基准 | 可对比不同硬件平台 (如 Xeon/EPYC) 下的性能表现 |
附录
附录 A:关键环境变量
UPSTREAM_IP=192.168.28.252
UPSTREAM_PORT=6060
DEVICE_COUNT=50000
BASE_PORT=10000
DEVICE_ID_PREFIX=3402000000
PASSWORD=123456
FIXED_STREAM=rtp/test_stream
ZLM_API_BASE=http://127.0.0.1:9080
ZLM_SECRET=your_secret
PUBLIC_IP=192.168.28.23
HEARTBEAT_INTERVAL=30
REGISTER_EXPIRES=3600
RUST_LOG=info
附录 B:服务端 top 数据(5万设备稳态)
top - 21:22:01 up 11:21, 0 users, load average: 0.15, 0.37, 0.34
任务: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3764.1 total, 172.9 free, 3559.3 used, 277.1 buff/cache
MiB Swap: 3939.0 total, 3502.3 free, 436.7 used. 204.8 avail Mem
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
181207 root 20 0 136120 112124 1824 0.0 2.9 8:11.60 gbhub-sip
📌 说明:空闲时 CPU 接近 0%,说明 gbhub-sip 在无负载时无后台轮询或定时任务消耗。
附录 C:压测机 top 数据(5万设备稳态)
top - 21:25:00 up 11:24, 0 users, load average: 0.25, 0.40, 0.35
任务: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3764.1 total, 172.9 free, 3559.3 used, 277.1 buff/cache
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
217337 root 20 0 4209816 2.5g 792 0.0 69.3 0:39.70 gbhub-stress
附录 D:压测统计示例
========== GBHub-Stress 压测统计 ==========
已注册设备数: 50000/50000 (100.00%)
总 INVITE 请求数: 6
涉及设备数: 4
==========================================