`

Red5 0.7 版本的内存泄漏分析和解决方案

阅读更多

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的整个过程,相信还有很多地方,我们仍然可以优化它。

 

0
0
分享到:
评论

相关推荐

    redline内存分析工具

    Redline内存分析工具是Fireeye对网络安全社区的重要贡献,它为安全研究人员和企业提供了强大的内存分析能力,有助于提升安全防护水平,及时发现和应对网络安全威胁。通过掌握和熟练使用Redline,安全专家可以更有效...

    Red5 Windows 0.7版(5)

    Flash开源服务器,Red5的Windows版,0.7最新版

    Red5 Windows 0.7版(1)

    Flash开源服务器,Red5的Windows版,0.7最新版

    Red5 Windows 0.7版(7)

    Flash开源服务器,Red5的Windows版,0.7最新版

    Red5 Windows 0.7版(2)

    Flash开源服务器,Red5的Windows版,0.7最新版

    Red5 Windows 0.7版(6)

    Flash开源服务器,Red5的Windows版,0.7最新版

    Red5 Windows 0.7版(4)

    Flash开源服务器,Red5的Windows版,0.7最新版

    Red5 Windows 0.7版(3)

    Flash开源服务器,Red5的Windows版,0.7最新版

    RED_0.7.9.20170629090422-macosx.cocoa.x86_64

    标题中的"RED_0.7.9.20170629090422-macosx.cocoa.x86_64"是一个软件版本标识,它揭示了这是RED集成开发环境(IDE)的一个特定版本。RED是Robot Framework的首字母缩写,是一个开源的自动化测试框架,广泛应用于软件...

    red5 windows版本

    Windows版本的Red5允许在Windows操作系统上搭建流媒体服务,为用户提供多媒体内容的发布、录制、存储和播放等功能。 首先,让我们详细讲解一下如何在Windows系统上安装Red5: 1. **下载与准备**: - 首先,你需要...

    red5入门,tomcat+red5+myeclipse集成,原创禁止转载

    3. 如果遇到问题,查阅Red5的官方文档或在相关论坛寻找解决方案。 总之,通过这个教程,你将学会如何在Tomcat上集成Red5,并利用MyEclipse进行高效开发。这只是一个起点,随着对Red5的深入学习,你会发现它在实时...

    Red5-0.9.1

    0.9.1是Red5的一个特定版本,旨在提供稳定性和性能改进,以及可能的新功能。在这个版本中,用户可以期待对先前版本的错误修复和优化。 Red5的核心功能包括: 1. **流媒体服务**:Red5支持多种流媒体协议,如RTMP...

    red5和配套运行的oflaDemo

    如果你遇到任何问题,首先查阅手册,其次可以参考Red5的官方论坛和其他开发者社区,那里有丰富的经验和解决方案。 总之,Red5和OflaDemo是流媒体开发者和爱好者的实用工具,它们结合使用可以帮助你搭建一个功能齐全...

    setup-Red5-1.0.5(windows安装版 for jdk8)

    Red5是一款开源的流媒体服务器,它支持实时流传输协议(RTMP)、HLS、RTSP等协议,常用于视频直播、视频点播和互动应用。"setup-Red5-1.0.5(windows安装版 for jdk8)" 是Red5的一个特定版本,专为Windows操作系统...

    red5 1.0 web版 myeclipse工程

    描述中提到的“修复自定义视频播放和录制目录”意味着项目已经解决了在Red5中设定自定义播放和录制路径的问题。这对于有特定存储需求的应用场景非常有用,例如,可以根据用户需求将视频存储在不同的服务器或云存储...

    基于 Red5 的流媒体服务器的搭建和应用

    无论是构建即时通信系统、远程教育平台还是在线游戏,Red5都能提供稳定可靠的解决方案。通过深入了解Red5及其相关的流媒体技术,开发者可以更好地利用这些工具和技术,创造出更多有价值的应用和服务。

    red5入门详细教程

    通过深入学习Red5和Flash开发,你将能够构建起一套完整的流媒体解决方案,满足各种多媒体应用场景的需求。无论是个人项目还是商业应用,Red5都能提供强大的支持。祝你在学习旅程中取得丰硕成果!

    Red5 1.0 Final Web版

    Red5 1.0 Final是该软件的一个稳定版本,为用户提供了一个可靠的平台来处理多媒体数据。 在整合Red5 1.0 Final与Apache Tomcat时,我们首先要理解这两个组件的角色。Red5作为一个流媒体服务器,负责处理和分发...

Global site tag (gtag.js) - Google Analytics