linux 下怎么解决red5 的内存溢出
Red5作为多媒体的开源的框架,实现了RTMP协议,完成了视频,音频和多媒体数据的传输和解析,很多的产品都在使用它。我们同样在用他们的服务,但是遇到一个内存泄漏的问题,这个内存泄漏是如何发现的呢:
现象:服务器跑了两天左右,出现了两种情况 :
1内存溢出
2内存没有溢出,但是提供不了任何服务,服务器不能接收任何request
分析:
1扩大虚拟机的内存,结果服务器跑长了点时间,照样内存溢出
2Dump出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 091的版本了,目前情况良好,同时为了确保服务器的稳定性,我们也查阅了相关的源代码,可以确定091版本中已经fix了这个问题。相信red5 server在我们的产品上线后会处于非常稳定的状态。
发现这个问题,一些工具的使用是关键的:
首先,要会分析heap快照,而eclipse memory analyzer确实是很强大的工具。帮我们提供了大量有用的信息。
其次,开源软件是不可靠的,只有我们对它们的代码有深入的分析才会得出好的结果。还好,源代码开放也为我们提供了查找问题来龙去脉的根据。而我们也可以对开源软件进行优化,在以后的内容里,我也会记录我们优化red5 server的整个过程,相信还有很多地方,我们仍然可以优化它。
网上找的~~
是RAID
Raid是磁盘阵列,用多个磁盘保证数据的安全
在RAID家族里,RAID 0和RAID 1在个人电脑上应用最广泛,毕竟愿意使用4块甚至更多的硬盘来构筑RAID 0+1或其他硬盘阵列的个人用户少之又少,因此我们在这里仅就这两种RAID方式进行讲解。我们选择支持IDE-RAID功能的升技KT7A-RAID主板,一步一步向大家介绍IDE-RAID的安装。升技KT7A-RAID集成的是HighPoint 370芯片,支持RAID 0、1、0+1。
做RAID自然少不了硬盘,RAID 0和RAID 1对磁盘的要求不一样,RAID 1(Mirror)磁盘镜像一般要求两块(或多块)硬盘容量一致,而RAID 0(Striping)磁盘一般没有这个要求,当然,选用容量相似性能相近甚至完全一样的硬盘比较理想。为了方便测试,我们选用两块60GB的希捷酷鱼Ⅳ硬盘(Barracuda ATA Ⅳ、编号ST360021A)。系统选用Duron 750MHz的CPU,2×128MB樵风金条SDRAM,耕升GeForce2 Pro显卡,应该说是比较普通的配置,我们也希望借此了解构建RAID所需的系统要求。
1RAID 0的创建
第一步
首先要备份好硬盘中的数据。很多用户都没有重视备份这一工作,特别是一些比较粗心的个人用户。创建RAID对数据而言是一项比较危险的操作,稍不留神就有可能毁掉整块硬盘的数据,我们首先介绍的RAID 0更是这种情况,在创建RAID 0时,所有阵列中磁盘上的数据都将被抹去,包括硬盘分区表在内。因此要先准备好一张带Fdisk与Format命令的Windows 98启动盘,这也是这一步要注意的重要事项。
第二步
将两块硬盘的跳线设置为Master,分别接上升技KT7A-RAID的IDE3、IDE4口(它们由主板上的HighPoint370芯片控制)。由于RAID 0会重建两块硬盘的分区表,我们就无需考虑硬盘连接的顺序(下文中我们会看到在创建RAID 1时这个顺序很重要)。
第三步
对BIOS进行设置,打开ATA RAID CONTROLLER。我们在升技KT7A-RAID主板的BIOS中进入INTEGRATED PERIPHERALS选项并开启ATA100 RAID IDE CONTROLLER。升技建议将开机顺序全部改为ATA 100 RAID,实际我们发现这在系统安装过程中并不可行,难道没有分区的硬盘可以启动吗?因此我们仍然设置软驱作为首选项。
第四步
接下来的设置步骤是创建RAID 0的核心内容。
1系统BIOS设置完成以后重启电脑,开机检测时将不会再报告发现硬盘。
2磁盘的管理将由HighPoint 370芯片接管。
3下面是非常关键的HighPoint 370 BIOS设置,在HighPoint 370磁盘扫描界面同时按下“Ctrl”和“H”。
4进入HighPoint 370 BIOS设置界面后第一个要做的工作就是选择“Create RAID”创建RAID。
5在“Array Mode(阵列模式)”中进行RAID模式选择,这里能够看到RAID 0、RAID 1、RAID 0+1和Span的选项,在此我们选择了RAID 0项。
6RAID模式选择完成会自动退出到上一级菜单进行“Disk Drives(磁盘驱动器)”选择,一般来说直接回车就行了。
7下一项设置是条带单位大小,缺省值为64kB,没有特殊要求可以不予理睬。
8接着是“Start Create(开始创建)”的选项,在你按下“Y”之前,请认真想想是否还有重要的数据留在硬盘上,这是你最后的机会!一旦开始创建RAID,硬盘上的所有数据都会被清除。
9创建完成以后是指定BOOT启动盘,任选一个吧。
按“Esc”键退出,当然少不了按下“Y”来确认一下。
HighPoint 370 BIOS没有提供类似“Exit Without Save”的功能,修改设置后是不可逆转的。
第五步
再次重启电脑以后,我们就可以在屏幕上看到“Striping(RAID 0)for Array #0”字样了。插入先前制作的启动盘,启动DOS。打开Fdisk程序,咦?怎么就一个硬盘可见?是的,RAID阵列已经整个被看作了一块硬盘,对于操作系统而言,RAID完全透明,我们大可不必费心RAID磁盘的管理,这些都由控制芯片完成。接下来按照普通单硬盘方法进行分区,你会发现“这个”硬盘的容量“变”大了,仔细算算,对,总容量就是两块硬盘相加的容量!我们可以把RAID 0的读写比喻成拉链,它把数据分开在两个硬盘上,读取数据会变得更快,而且不会浪费磁盘空间。在分区和格式化后千万别忘了激活主分区。
第六步
选择操作系统让我们颇费周折,HighPoint370芯片提供对Windows 98/NT/2000/XP的驱动支持,考虑到使RAID功能面向的是相对高级的用户,所以我们选择了对新硬件支持更好的Windows XP Professional英文版(采用英文版系统主要是为了方便后面的Winbench测试,大家自己使用RAID完全可以用中文版的操作系统),Windows 2000也是一个不错的选择,但是硬件支持方面显然不如Windows XP Professional。
第七步
对于采用RAID的电脑,操作系统的安装和普通情况下不一样,让我们看看图示,这是在Windows XP完成第一步“文件复制”重启以后出现的画面,安装程序会以英文提示“按下F6安装SCSI设备或RAID磁盘”,这一过程很短,而且用户往往会忽视屏幕下方的提示。
按下F6后出现安装选择,选择“S”将安装RAID控制芯片驱动,选择“Enter”则不安装。
按下“S”键会提示插入RAID芯片驱动盘。
键入回车,安装程序自动搜索驱动盘上的程序,选择“WinXP”那一个并回车。
如果所提供的版本和Windows XP Profesional内置的驱动版本不一致,安装程序会给出提示让用户进行选择。
按下“S”会安装软盘所提供的而按下“Enter”则安装Windows XP Professional自带的驱动。按下“S”后又需要确认,这次是按“Enter”(这个……确认太多了,呵呵)。接下来是正常的系统安装,和普通安装没有任何区别。
RAID 0的安装设置我们就介绍到这里,下面我们会谈谈RAID 1的安装。与RAID 0相比,RAID 1的安装过程要简单许多,在正确操作的情况下不具破坏性。
2RAID 1的创建
虽然在原理上和RAID 0完全不一样,但RAID 1的安装设置过程却与RAID 0相差不多,主要区别在于HighPoint 370 BIOS里的设置。为了避免重复,我们只向大家重点介绍这部分设置:
进入HighPoint 370 BIOS后选择“Create RAID”进行创建:
1在“Array Mode”上点击回车,在RAID模式选择中选择第二项“Mirror(RAID 1)for Data Security(为数据源盘创建镜像)”。
2接着是源盘的选择,我们再次提醒用户:务必小心,不要选错。
3然后是目标盘的选择,也就是我们所说的镜像盘或备份盘。
4然后开始创建。
5创建完成以后BIOS会提示进行镜像的制作,这一过程相当漫长。
6我们用了大约45分钟才完成60GB的镜像制作,至此RAID 1创建完成。
RAID 1会将主盘的数据复制到镜像盘,因此在构建RAID 1时需要特别小心,千万不要把主盘和镜像盘弄混,否则结果将是悲剧性的。RAID 1既可在两块无数据的硬盘上创建,也能够在一块已经安装操作系统的硬盘上添加,比RAID 0方便多了(除了漫长的镜像制作过程)。创建完成以后我们试着将其中一块硬盘拔下,HighPoint370 BIOS给出了警告,按下“Esc”,另一块硬盘承担起了源盘的重任,所有数据完好无损。
对于在一块已经安装操作系统的硬盘上添加RAID 1,我们建议的步骤是:打开BIOS中的控制芯片→启动操作系统安装HighPoint 370驱动→关机将源盘和镜像盘接在IDE3、4口→进入HighPoint 370 BIOS设置RAID 1(步骤见上文介绍)→重启系统完成创建。
我们对两种RAID进行了简单的测试,虽然RAID 0的测试成绩让人有些不解,但是实际使用中仍然感觉比单硬盘快了很多,特别是Windows XP Professional的启动异常迅速,进度条一闪而过。至于传输率曲线出现不稳定的情况,我们估计和平台选择有一些关系,毕竟集成芯片在进行这种高数据吞吐量的工作时非常容易被干扰。不过即使是这样,我们也看到RAID 0系统的数据传输率达到了非常高的水平,一度接近60MB/s。与RAID 0相比,RAID 1系统的性能虽然相对单磁盘系统没有什么明显的改善,但测试中我们发现RAID 1的工作曲线显得非常稳定,很少出现波动的情况。
再看看Winbench99 20中的磁盘测试成绩,一目了然。
对用户和操作系统而言,RAID 0和1是透明不影响任何操作的,我们就像使用一块硬盘一样
一般来说,云手机服务器通过虚拟化技术将多台手机模拟器部署在物理服务器上。这些手机模拟器可以运行各种操作系统(如Android、iOS等),并提供与真实手机相似的功能和性能。
以下是云手机服务器性能可能受到影响的一些重要因素:
硬件配置:云手机服务器的性能受到服务器硬件配置的影响,例如处理器性能、内存容量和存储速度等。更高性能的硬件可以提供更好的运行效果和响应速度。
网络连接质量:云手机服务器需要稳定和快速的网络连接才能提供良好的用户体验。较低的延迟和快速的上传/下载速度对于实时流媒体、游戏和其他网络应用尤为重要。
资源分配策略:云服务提供商会根据用户需求和服务器负载情况进行资源分配。如果共享服务器资源的用户较多,可能会导致性能下降。因此,选择有良好资源管理策略的云服务提供商可以提供较为稳定的性能。
另外,云手机服务器的性能也受到应用程序本身和网络带宽的限制。某些高性能、图形密集型的应用可能需要更强大的服务器配置来提供流畅的体验。
0条评论