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的整个过程,相信还有很多地方,我们仍然可以优化它。
分享到:
相关推荐
Redline内存分析工具是Fireeye对网络安全社区的重要贡献,它为安全研究人员和企业提供了强大的内存分析能力,有助于提升安全防护水平,及时发现和应对网络安全威胁。通过掌握和熟练使用Redline,安全专家可以更有效...
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
Flash开源服务器,Red5的Windows版,0.7最新版
标题中的"RED_0.7.9.20170629090422-macosx.cocoa.x86_64"是一个软件版本标识,它揭示了这是RED集成开发环境(IDE)的一个特定版本。RED是Robot Framework的首字母缩写,是一个开源的自动化测试框架,广泛应用于软件...
Windows版本的Red5允许在Windows操作系统上搭建流媒体服务,为用户提供多媒体内容的发布、录制、存储和播放等功能。 首先,让我们详细讲解一下如何在Windows系统上安装Red5: 1. **下载与准备**: - 首先,你需要...
3. 如果遇到问题,查阅Red5的官方文档或在相关论坛寻找解决方案。 总之,通过这个教程,你将学会如何在Tomcat上集成Red5,并利用MyEclipse进行高效开发。这只是一个起点,随着对Red5的深入学习,你会发现它在实时...
0.9.1是Red5的一个特定版本,旨在提供稳定性和性能改进,以及可能的新功能。在这个版本中,用户可以期待对先前版本的错误修复和优化。 Red5的核心功能包括: 1. **流媒体服务**:Red5支持多种流媒体协议,如RTMP...
如果你遇到任何问题,首先查阅手册,其次可以参考Red5的官方论坛和其他开发者社区,那里有丰富的经验和解决方案。 总之,Red5和OflaDemo是流媒体开发者和爱好者的实用工具,它们结合使用可以帮助你搭建一个功能齐全...
Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、HLS、RTSP等协议,常用于视频直播、视频点播和互动应用。"setup-Red5-1.0.5(windows安装版 for jdk8)" 是Red5的一个特定版本,专为Windows操作系统...
描述中提到的“修复自定义视频播放和录制目录”意味着项目已经解决了在Red5中设定自定义播放和录制路径的问题。这对于有特定存储需求的应用场景非常有用,例如,可以根据用户需求将视频存储在不同的服务器或云存储...
无论是构建即时通信系统、远程教育平台还是在线游戏,Red5都能提供稳定可靠的解决方案。通过深入了解Red5及其相关的流媒体技术,开发者可以更好地利用这些工具和技术,创造出更多有价值的应用和服务。
通过深入学习Red5和Flash开发,你将能够构建起一套完整的流媒体解决方案,满足各种多媒体应用场景的需求。无论是个人项目还是商业应用,Red5都能提供强大的支持。祝你在学习旅程中取得丰硕成果!
Red5 1.0 Final是该软件的一个稳定版本,为用户提供了一个可靠的平台来处理多媒体数据。 在整合Red5 1.0 Final与Apache Tomcat时,我们首先要理解这两个组件的角色。Red5作为一个流媒体服务器,负责处理和分发...