问题描述:openfire部署到服务器上启动后运行正常,用户连接正常,内存占用几十兆,但运行十天左右后用户就再也连不上Openfire了,而此时到任务管理器上查看,openfire占用的内存已达到280多兆,openfire占用内存一直在增加,等达到极限后就挂了。查找了很多资料,问题定位在内存溢出和内存泄露,具体解决方案如下:
1、给openfire的JVM分配更多的内存空间。
OpenFire的JVM默认情况下使用64M内存
这在将OpenFire作为服务运行的情况下肯定不够用
我们需要修改参数.使其能够占用服务器的更多内存资源
Windows:
在openfire的bin目录下建立openfired.vmoptions(作为应用程序运行)或者openfire-service.vmoptions(作为服务运行)
内容添加
-Xms512m
-Xmx512m
-XX:SurvivorRatio=7
-XX:PermSize=256m
-XX:MaxPermSize=256m
指定了最大内存512M,其中永久内存256M ,在控制台中看到openfire可用内存确实变大了(内存大小可自己根据实际需要进行设置)
Linux:
修改/etc/sysconfig/opfire文件
去掉注释
OPENFIRE_OPTS=”-Xmx512m”
2、openfire吃内存只吃不吐,最后把自己活活撑死。经过查资料设置了一个参数最后解决:
在openfire的系统属性里添加如下参数。
xmpp.pep.enabled = false
这个是关闭openfire的PEP功能,PEP到底是啥功能目前不清楚,以后查到后再补进来。
3、检查自己写的openfire插件或操作数据库时有没有及时关闭流或连接,以免造成内存溢出(编码规范)。
目前优化后的效果还在进一步观察中,本文作为学习笔记记录一下,后面有需要还会进行相应补充。
以上方案的整理参考以下文章:
http://blog.youkuaiyun.com/happyhell/article/details/4311234
http://blog.sina.com.cn/s/blog_5da3708f01016paf.html
http://www.tuicool.com/articles/jyMVne
openfire问题解决汇总:
http://blog.youkuaiyun.com/xyz_fly/article/details/8666006
------------------------------------------------------------------------------2015-9-7---------------------------------------------------------------------------------------------------
今日个人重大发现:
这几日一直在解决openfire内存溢出问题,上面我提到要主动给openfire分配内存空间,我就写了一个配置文件openfired.vmoptions,但这个配置文件只对openfired.exe进程起作用,实际上openfire有两个进程,另一个就是openfire.exe,也是主进程,他们两个的区别就是多两个"d"。今天发现内存溢出的竟然是openfire.exe,我就尝试再写了一个与openfire.exe对应的配置文件openfired.vmoptions,结果真的起作用了。
给openfire分配内存空间时创建的两个文件
效果图:
如果自身程序代码没问题的话openfire内存溢出的问题就可以通过这种方式解决了。不过遇到内存溢出问题时还是要仔细检查自己写的代码是否有问题。希望这篇文章能给遇到相同问题的朋友以参考和帮助,有问题欢迎共同探讨。