注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

OpenFire在Linux下的性能优化  

2017-10-13 10:15:55|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
上次一文已经提及过OpenFire对JVM的参数优化,请参看《OpenFire的JVM参数优化(内存) 》。不过,除此之外,还有很多地方是可以优化的,下面来一一举例:
1)替换掉OpenFire自带的JRE环境,如果通过ps -aux | grep openfire查看openfire服务能观察到启动命令为:
/opt/openfire/jre/bin/java -server -Dinstall4j.jvmDir=/opt/openfire/jre打头的话,说明JVM【这里以OpenFire安装到/opt/openfire目录下为例】是OpenJDK,性能不行,需要另外安装JDK,并配置相应路径。另外,想要判断是OpenJDK还是JDK,可以使用命令:“java -version”,根据返回的结果就可以判断到底是OpenJDK还是JDK。
OpenFire在Linux下的性能优化 - 1976xyg - 红尘若梦
2)修改打开最大文件数目。
因为Linux默认值是1024个,所以只能支持1000左右的在线用户数。执行ulimit –n 65535修改,或者修改/etc/security/limits.conf,加入如下一行【这里因为启动OpenFire使用的是root用户,所以指定用户名为root】:

root hard nofile 65535

3)修改端口范围。如果使用默认值,大约28000连接就不行了。修改/etc/sysctl.conf,加入:

net.ipv4.ip_local_port_range = 1024 65000

执行sysctl –p让参数生效,再通过sysctl –a | grep range查看是否已经有变化。这样就可以大约支持6W个连接。
4)openfire不支持64位的JDK,所以如果需要的话,请安装32位的JDK,如果需要64位跟32位JDK并存,请额外指定参数EXE4J_JAVA_HOME,其属性的值为32位JDK的所在位置。
以上就是大致需要优化的地方,配合之前的文章应该就可以让OpenFire更好的动作。此外,这里还需要说明一点,理论上来说32位JVM有4G的堆大小限制,但是因为各种其它条件限制,比如交换区,内核地址空间使用,内存碎片,虚拟管理机的管理开销,实际上可用的堆的大小远远比理论上的4G要少。 
经测试使用-xms -xmx 定义堆大小在各种环境下:
在32位windows的机器上,堆最大可以达到1.4G至1.6G。 
在32位solaris的机器上,堆最大可以达到2G。
在64位的操作系统上,32位的JVM,堆大小可以达到4G。
在64位的操作系统上,64位的JVM,堆大小受限于物理内存和操作系统提供的虚拟内存。
得出结论如下:
a. 如果是32位的操作系统,32位的jvm,超过4G肯定是没用的,即使定义了4G,最终能够使用到的可能还是只有2G。
b. 这两个值最好定义成一样,可以减少Java gc的操作,对执行效率有小幅度性能提高。
c. Sun的官网上写着,当一个java应用程序从32位移植到64位JVM上时,性能不仅没有提升,反而会有损失。这一点估计很多人都意想不到,其实,这也跟多核CPU一样,因为线程切换,编译器等原因,性能提升并不会如您所愿【甚至多核运行专为单线程编写的相关软件,反而性能会下降】。
d. OpenFire目前并不支持64位JDK,也许以后随着软件版本升级,会提供相应的支持。

  评论这张
 
阅读(2)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018