DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 《让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能》一文介绍了 Nginx 的在线统计模块。
        我们的在线直播服务使用了 Nginx 的 Rtmp 模块(请参阅《Nginx RTMP 模块 nginx-rtmp-module 指令详解》)。总体来讲,这个模块的功能稳定性和性能等方面都是很出色的。只要你的直播源头数据供给没问题,Nginx 的直播发布就 No Problem。
        对于闲置频道,就是没人观看的直播频道,为了节省系统资源,我们进行了定时清理。那么怎么判定一个频道是闲置的呢?一开始我们使用了《让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能》介绍的方法,Java 使用 Apache 的 http client 调用 Nginx 的 nclients,即 http://直播服务器IP/nclients?app=app应用名&name=频道名,所得结果为 0 的即为闲置频道。
        但在实际环境中,我们发现,这个在线统计功能并不靠谱。有时有人正在播放的频道,被统计为 0。这样造成统计错误,进而使不应该被清理的频道被清理掉,严重影响了直播效果的稳定性。
        一开始我们以为是自己没有配置好 Nginx,但重新检查并反复部署仍然如此。
        有次我们使用 http://直播服务器IP/stat 直接用页面跟踪直播频道的在线统计情况,发现统计结果正常的几率在 80% 以上。然而那错误的 20% 的统计结果足以让我们的清理程序犯下致命的错误了。我们不禁对 Nginx 的在线统计功能产生了怀疑,这个靠谱不靠谱?
        经过多方求证,其中包括 RTMP 模块的作者的权威确认,我们终于得到结论,这确实是 Nginx 的一个 Bug。 
        原来是 Nginx 的 stat 对 multi-worker 模式的并发支持不够好造成的。
        官方给出两种解决方法:让 Nginx 工作在 single-worker 模式,或者为每个 Nginx worker 配置单独的 stat file。
        第一种方法对于 Nginx 提供的性能肯定大有影响,尤其是对于多核服务器。第二种方法,官方却没有说明如何单独配置。
        结合实际情况,我们没有使用这两种方法,而是自己去管理维护每个直播频道的连接数量。当然这也不是最好的办法,还是希望 Nginx 能够尽快支持 multi-worker 模式下的 stat。
参考链接:https://github.com/arut/nginx-rtmp-module/issues/159

参考解决:https://www.cnblogs.com/lidabo/p/9078861.html

 

posted on   DoubleLi  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2017-05-23 mci播放mp3
2017-05-23 VC用MCI播放mp3等音乐文件
2017-05-23 vc中播放mp3文件的方法小结
2017-05-23 vc应用CPictureEx类(重载CStatic类)加载gif动画
2017-05-23 unicode和utf8之间的关系
2017-05-23 Unicode 和 ANSI
2017-05-23 C++文件(夹)选择对话框
点击右上角即可分享
微信分享提示