Red5作为多媒体的开源的框架,实现了RTMP协议,完成了视频,音频和多媒体数据的传输和解析,很多的产品都在使用它。我们同样在用他们的服务,但是遇到一个内存泄漏的问题,这个内存泄漏是如何发现的呢:
现象:服务器跑了两天左右,出现了两种情况
:
1.内存溢出
2.内存没有溢出,但是提供不了任何服务,服务器不能接收任何request
分析:
1.扩大虚拟机的内存,结果服务器跑长了点时间,照样内存溢出
2.Dump出Heap快照,并用Eclispse Memory Analyzer进行分析,发现RTMPMinaConnection对象大量存在ConcurrentHashMap对象里面,为什么会出现大量的connnection?即使是大量的客户端请求,为什么内存没有释放?
3.分为三个问题考虑:
1)为什么会出现大量的connnection?连接从哪里来的
2)大量的connection为什么会没有释放?
3)为什么connection达到一定的数量,服务器即使在内存充裕的情况下,仍然提供不了任何服务?
根据大量的观测,发现red5 服务器,我们用Haproxy代理了rtmp请求,而HA即使没有请求的情况下,仍然试图连接,以探测代理的服务器是否存活,而red5的keepalive时间一过,会试图关闭连接,关闭之后,通过查看源代码发现,connection虽然关闭了,但是没有从concurrentHashupMap里面remove掉,而真是这种Ha的不停的通过创建心跳连接来探测red5是否处于活的状态,而red5关闭连接之后,并没有从concurrentHashMap里面移除,从而造成了最终的内存溢出,同时由于没有移除inactive的连接达到了red5设定的最大的允许的inactivity连接的数量,默认为60000个连接,从而造成我们刚才看到的现象-即使内存充裕的情况下,仍然提供不了任何服务的情况。
查找这个错误的过程是痛苦的,甚至没有一点头绪,还好通过大量的测试和源代码分析,发现了这个问题。我们现在已经升级到red5 0.9.1的版本了,目前情况良好,同时为了确保服务器的稳定性,我们也查阅了相关的源代码,可以确定0.9.1版本中已经fix了这个问题。相信red5 server在我们的产品上线后会处于非常稳定的状态。
发现这个问题,一些工具的使用是关键的:
首先,要会分析heap快照,而eclipse memory analyzer确实是很强大的工具。帮我们提供了大量有用的信息。
其次,开源软件是不可靠的,只有我们对它们的代码有深入的分析才会得出好的结果。还好,源代码开放也为我们提供了查找问题来龙去脉的根据。而我们也可以对开源软件进行优化,在以后的内容里,我也会记录我们优化red5 server的整个过程,相信还有很多地方,我们仍然可以优化它。
分享到:
相关推荐
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Fireeye安全公司发布的一款针对内存分析的工具,可对内存数据进行整理和分析
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
red5 windows版本 安装教程https://blog.csdn.net/u011353570/article/details/53177189 转载
robotframework的一个最新的工具,外国网址下载很慢,特此上传。
Red5 为即时通信,远程教育,流媒体开发,多人在线游戏等提供了一个简单易行的方案。本文通过对 Red5 的介绍,让读者了解如何使用 Red5 快速搭建一个流媒体服务器和如何在服务器上开发部署相应的流媒体应用。
Red5_0.9.1 + MyEclipse10.7 中单步调试Demo Publisher : 编译通过Red_091 后,调试参数设置如下 。 右键项目 - Debug As -- Debug Configurations --Environment : 设置 RED5_HOME 环境变量 "Main class...
Red5的0.9.1版本
red5 与 tomcat项目集成
red5-1.0.6免安装版,适用于window64位(需要先安装jdk1.7,注意是red5-1.0.6需要的是1.7,在这之前装了好几个最新的red5,比如1.0.8,需要的jdk是1.8),解压后,可以设置conf中的red5.properties,也可不设置。...
用了一个origin 一个 edge 一个 原red5-conf目录 和一个说明文档 red5版本0.7
RED5最重要的例程"oflaDemo 。...换RED5的版本,从0.8-1.0,不行!从CSDN下载数个不同的 "oflaDemo" ,还是不行!! 正当我想放弃RED5的时候,我发现了这个。亲测有效!我的环境:XP JAVA6 RED5 1.0。亲们,烦恼不在!
本资源是使用 Java servlets 将文件上传到 Red5 服务器的源代码。chapter2 是服务器 Red5 源文件,UploadToRed5Proj 是客户端 Flex3 源文件。 关于使用 Flex 和Java servlets 将文件上传到 RED5 服务器的步骤,请...
改进的red5应用的集群方案,帮助了解建立red5集群的方法。