Openfire在Linux下的性能优化

来源:互联网 发布:国家电网 大数据预算 编辑:程序博客网 时间:2024/05/16 03:39

原文地址:

1.OpenFire的JVM参数优化(内存)  

http://1976xyg.blog.163.com/blog/static/145653525201511156202925/


2.Openfire在Linux下的性能优化

http://1976xyg.blog.163.com/blog/static/14565352520160505430683/

==================================================================================================


OpenFire的JVM默认情况下使用64M内存,在将OpenFire作为服务运行的情况下肯定不够用,需要修改参数使其能够占用服务器的更多内存资源,以便达到更好的提交性能。具体的修改参数办法如下:

1)WINDOW
在openfire的bin目录下建立openfired.vmoptions(作为应用程序运行)或者openfire-service.vmoptions(作为服务运行),内容如下:

-Xms512m-Xmx512m-Xss128k-Xoss128k-XX:ThreadStackSize=128

2)LINUX
要分两种情况,一种是RPM安装,一种是直接解压安装:
a)RPM安装
修改/etc/sysconfig/opfire文件,去掉注释,修改参数成合适的值
OPENFIRE_OPTS=”-Xms 512m -Xmx512m -Xss128k -Xoss128k -XX:ThreadStackSize=128 ”
b)直接解压安装
直接解压,需要修改bin/openfire,请查找
$INSTALL4J_JAVA_PREFIX nohup "$app_java_home/bin/java" -server -Dinstall4j.jvmDir="$app_java_home" -Dexe4j.moduleName="$prg_dir/$progname" "-DopenfireHome=$prg_dir/../" "-Dopenfire.lib.dir=$app_home/lib" "-Dinstall4j.launcherId=22" "-Dinstall4j.swt=false" "$vmov_1" "$vmov_2" "$vmov_3" "$vmov_4" "$vmov_5" $INSTALL4J_ADD_VM_PARAMS -classpath "$local_classpath" com.install4j.runtime.launcher.Launcher start org.jivesoftware.openfire.starter.ServerStarter false false "$prg_dir/../logs/stderror.log" "$prg_dir/../logs/stdoutt.log" true true false "" true true 0 0 "" 20 20 "Arial" "0,0,0" 8 500 "version 3.10.2" 20 40 "Arial" "0,0,0" 8 500 -1  > /dev/null 2>&1 &
在找到以上的命令行的后,将之改为:

$INSTALL4J_JAVA_PREFIX nohup "$app_java_home/bin/java" -server -Dinstall4j.jvmDir="$app_java_home" -Dexe4j.moduleName="$prg_dir/$progname" "-DopenfireHome=$prg_dir/../" "-Dopenfire.lib.dir=$app_home/lib" "-Dinstall4j.launcherId=22" "-Dinstall4j.swt=false" "$vmov_1" "$vmov_2" "$vmov_3" "$vmov_4" "$vmov_5" $INSTALL4J_ADD_VM_PARAMS -classpath "$local_classpath" com.install4j.runtime.launcher.Launcher start org.jivesoftware.openfire.starter.ServerStarter false false "$prg_dir/../logs/stderror.log" "$prg_dir/../logs/stdoutt.log" true true false "" true true 0 0 "" 20 20 "Arial" "0,0,0" 8 500 "version 3.10.2" 20 40 "Arial" "0,0,0" 8 500 -1 -Xms1G -Xmx1G -Xss128k -Xoss128k -XX:ThreadStackSize=128 -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider > /dev/null 2>&1 &

加入以上红色参数,替换两次。其中额外附加参数:-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider指定linux下面用epoll.java.nio【JDK 6.0 以及JDK 5.0 update 9 的 nio支持epoll (仅限 Linux 系统)】对并发idle connection会有大幅度的性能提升。
网上还有另一种做法,去掉INSTALL4J_ADD_VM_PARAMS前的注释,并修改如下:

# Uncomment the following line to add additional VM parameters

INSTALL4J_ADD_VM_PARAMS="-Xms256m -Xmx768m -Xss128k -Xoss128k -XX:ThreadStackSize=128"
笔者试过好象并不成功【也许是因为并没有额外安装JDK,只使用了OpenFire自带的openjdk环境】,大家有兴趣可以去试试。在执行如上操作后,重启下OpenFire即可生效。如果需要察看当前JVM所有可设置的参数以及当前默认值,请使用命令:

java -XX:+PrintFlagsInitial

OpenFire的JVM参数优化(内存) - 1976xyg - 红尘若梦

除此之外,还有很多地方是可以优化的,下面来一一举例:
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,也许以后随着软件版本升级,会提供相应的支持。


0 0
原创粉丝点击