流媒体服务器 16 核 64GB 存储,尝试 RTMP 推流 1000 路,服务器没有跑满,但是画面产生了延迟或停顿,以及断开连接。

以下是记录我的解决方案:

查询 memstats 信息

我尝试通过 /debug/vars 查询程序内信息,此时 GC 次数是 168 次,占用 CPU 比例是 2%,GC 总共停止时间是 263毫秒。

当前数值的消耗,不应该对程序影响那么大。

image-20250522112138586

看看 cpu 运行消耗

取一下 CPU 信息,/debug/pprof/profile?seconds=30s

image-20250522112811795

局部放大

image-20250522120927723

  • 小对象(mallocgcSmallNoscan)分配占用 34.18%
  • 堆扩容(growslice)占用 7.31%

将涉及到频繁分配对象的代码注释掉,再压测一下看看视频流确实流畅多了,但依然存在卡顿。

再抓一次 cpu 信息,可以看到主要消耗是系统调用

image-20250522145706685

多推一会流,在抓 cpu,grow 是一个内存分配的函数,程序在频繁内存扩容

image-20250523132430984

提前创建一定大小的内存,避免扩容后,节省一半性能

image-20250523132551286

网络情况

tx 是出站

tx 是入站

image-20250523141633187

Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy