📊 GBHub-Stress 压力测试报告

📅 测试日期:2026-08-29
🔖 版本:v0.1.0
👤 测试人员:GBHub Team
✅ 通过
压测规模 50,000 设备
50,000
模拟设备数
100%
注册成功率
< 2 秒完成
~0%
服务端 CPU (空闲)
无负载时
~200%
服务端 CPU (峰值)
4 核系统
112 MB
服务端内存 (RES)
~20 MB / 万设备
2.5 GB
压测机内存 (RES)
~50 KB / 设备
0
运行期间掉线
心跳稳定

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 软件版本

组件版本
Rust1.80+
ZLMediaKit最新稳定版
Valkey7.2+
GreptimeDB1.1.4+
gbhub-sip最新版

2.3 压测工具参数

参数取值
设备数量50,000
起始端口10,000
设备 ID 前缀3402000000
心跳间隔30 秒
注册有效期3,600 秒

3. 测试场景与执行过程

3.1 场景一:设备注册与保活(核心测试)

执行结果:工具启动后,50,000 个设备在 < 2 秒 内全部完成注册,之后持续稳定发送心跳。

3.2 场景二:实时点播(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,000100,000 (需多 IP)

5.4 工具限制

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. 结论

✅ 测试结论

后续建议

方向建议
继续加压若压测机内存 ≥ 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
==========================================