试用安装包下载 | SMS | 在线演示
项目源码地址:https://github.com/openskeye/go-vss
背景
性能优化离不开数据:要知道是队列积压、Map 泄漏还是goroutine 暴涨。VSS 在main中启动pprof,并通过SSE周期性推送内部计数器,形成轻量级仪表盘。
项目中的做法
1. pprof
main.go调用pprof.Start(c.PProfPort, c.PProfFileDir)(与配置中的端口、目录对应)。用于:
goroutine/heap/profile采样;- 定位CPU 热点(如 XML 解析、RTMP 打包)与内存分配。
2. SSESevState:每秒快照内部结构规模
logic/sse/sev_state.go中Ticker 1s向客户端推送多项计数,包括但不限于:
- 下载管理器任务数 / 客户端数;
SipCatalogLoopMap/SipHeartbeatLoopMap长度(节流器规模);InviteRequestState/PubStreamExistsState大小;AckRequestMap、DeviceOnlineStateUpdateMap、SipGBSSNMap等;- WebSocket 连接数、部分业务列表长度。
这些指标是判断泄漏与容量的第一道线:例如PubStreamExistsState长期上涨而实际无流,说明stop 路径未触发 Remove。
要点
- pprof 勿对公网开放:应仅内网或SSH 隧道访问。
- 建立基线:正常业务量下记录
SevState各字段区间,异常时对比。 - 与日志关联:出现计数异常时,叠加SIP 日志缩短定位时间。
相关代码路径
core/app/sev/vss/main.go—pprof.Startcore/app/sev/vss/internal/logic/sse/sev_state.go— 指标列表