Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug
《 让你的 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。
Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug的更多相关文章
- Nginx模块之———— RTMP 模块的在线统计功能 stat 数据流数据的获取(不同节点则获取的方式不同)
一.目前只有一个Live节点存在 单节点获取方式如下: public function getStreamByIp($outerIP, $streamName) { //查询录像模块的IP地址外网,根 ...
- OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
1.安装Homebrew,执行命令 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ma ...
- Mac系统安装nginx+rtmp模块
1.安装命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) ...
- Windows 编译安装 nginx 服务器 + rtmp 模块
有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...
- 就publish/subscribe功能看redis集群模式下的队列技术(一)
Redis 简介 Redis 是完全开源免费的,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中 ...
- Nginx学习之配置RTMP模块搭建推流服务
写在开始 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求. ...
- Nginx基础知识之————RTMP模块专题(实践文档)
on_publish 语法:on_publish url上下文:rtmp, server, application描述:这个可以设置为一个API接口(GET方式接受所有参数),会给这个API接口返回8 ...
- Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务
1. 背景 不知不觉笔者来到流媒体部门已经一年半多了,积攒了不少的流媒体知识,但平时工作也比较忙,很少进行总结性的梳理,最近准备花几个周末时间写一个流媒体系列的实践文章,也算是给自己做总结的同时帮助有 ...
- 利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看
一.环境和工具 ubuntu 14.04 desktop 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦. 不建议使用 最新的16TLS,我一开始 ...
随机推荐
- Linux makefile教程之函数七[转]
使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...
- ANT 发布项目中 build.xml 文件的详细配置
xml 代码 <?xml version="1.0" encoding="UTF-8"?> <!-- name:对应工程名字 default: ...
- 计算器显示e-005什么意思
计算器显示e-005什么意思 1e-005是科学表达式,即 =1e-5 =0.00001e+005就是乘以10的5次方 就是-1.4989*10^5 这是科学计数法(也叫指数计数法) 这是科学计数 ...
- 《深入理解C#》第3版 学习进度备忘
学习资源:<深入理解C#>第3版 知识基础支持: <C# in a nutshell> O Reilly出版社,是一本从头介绍C#的优秀图书.<Essential C#5 ...
- seo技巧-2015/10/05
1.每页都要有它自己的文件名,并且有它自己的上级文件夹和它自己相关关键字. 2.建议在每页上使用一个的H1标签.我也试着使用许多H2 或H3的标签在页面内辅助构成正文内容. 3. 有时花费一点钱帮助你 ...
- the hard thing about hard things 书摘
1. from communist to VC 领导力是什么,书后面还举了乔布斯的例子,比如NEXT公司时期就是如此,是什么吸引了那些人在前景不明时还跟随乔布斯? 作者用自己与妻子的相遇说明,不要 ...
- Camel In Action 阅读笔记 第一部分概述 + 第一章概述 认识Camel
第一部分: 最开始的一小步 Apache Camel 是一个开源集成框架,其目的是让系统集成变得更加简便,在本书的第一章中,我们会为您介绍它并向您展示它是如何在大型企业应用中做好集成工作.您也会了解到 ...
- HIve体系结构,hive的安装和mysql的安装,以及hive的一些简单使用
Hive体系结构: 是建立在hadoop之上的数据仓库基础架构. 和数据库相似,只不过数据库侧重于一些事务性的一些操作,比如修改,删除,查询,在数据库这块发生的比较多.数据仓库主要侧重于查询.对于相同 ...
- Context3D 不可用
打开项目文件夹中的html-template,并找到index.template.html,右键使用TextEditor编辑,在params.allowfullscreen=”true”:后面加上pa ...
- windows下python的包管理器pip安装
pip: A tool for installing and managing Python packages. 要用到第三方包,python的版本就必须是2.7 https://pypi.pyth ...