Openfire配置:
Ubuntu安装Openfire后性能极低,压力测试只能到4000在线用户数。
第一步 修改Openfire运行环境
经过ps -aux | grep openfire查看openfire服务能观察到启动命令为:
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java -server -DopenfireHome=/usr/share/openfir -Dopenfire.lib.dir=/usr/share/openfire/lib -classpath /usr/share/openfire/lib/startup.jar -jar /usr/share/openfire/lib/startup.jar
首先看到这里用的JVM是openjdk提供的,性能不行,所以先kill掉这个进程(若是不是使用Openjdk就不须要这个操做了)。Kill掉再执行ps看看是否是真正被改掉了,而后切换到root下执行/etc/init.d/openfire start。再次查看已经切换成本身的JDK路径了,前提是配置过JDK。
/home/david/java/jdk1.8.0_05//bin/java -server -DopenfireHome=/usr/share/openfire -Dopenfire.lib.dir=/usr/share/openfire/lib -classpath /usr/share/openfire/lib/startup.jar -jar /usr/share/openfire/lib/startup.jar
第二步 epoll方式修改:
为提升性能须要更改启动命令为NIO支持epoll,须要修改/etc/init.d/openfire脚本文件。将DAEMON_OPTS改成
DAEMON_OPTS="$DAEMON_OPTS -server -Xms3072m -Xmx4096m -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -DopenfireHome=${DAEMON_DIR} \
-Dopenfire.lib.dir=${DAEMON_LIB} -classpath ${DAEMON_LIB}/startup.jar\
-jar ${DAEMON_LIB}/startup.jar"
主要加入了-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider这个选项,注意这里还修改了jvm内存使用大小。
tsung压力测试:
第一步 修改打开最大文件数目
不作任何修改的主机安装tsung作压力测试时发现最多只能到达1000左右的在线用户数,错误为emfile执行ulimit –n查看为1024,意思是打开的文件太多了,默认为1024个。执行ulimit –n 65535,这个65535随便一个大点的数字就好。长期修改须要修改/etc/security/limits.conf,加入:
root - nofile 65535
注:root必须明确写上root不能使用*。
第二步 修改端口范围
继续作压力测试发现到达28000左右压力就上不去了,错误为eaddrinuse,这个时候是端口不够用了。须要修改/etc/sysctl.conf,加入:
net.ipv4.ip_local_port_range = 1024 65000
将端口可分配的范围增长到6W多个,执行sysctl –p当即生效,经过sysctl –a | grep range查看是否已经有变化。此时再去作压力测试就能发如今线用户数已经到达了6W个。
第三步 tsung集群
一台机模拟6W用户在线就已经到极限了,此时须要多台tsung测试机来进行测试。每台测试服务器上须要安装相同的erlang和tsung版本,而且经过root可以无密码登陆(root可能非必须)。另外特别注意的一点是机器名称不能使用lc-optex之类的,中间的“-”在erl中会致使没法链接,直接取名kf2lc这样就OK了。
以三台测试机(能够用虚拟机采用桥接模式)为例,假设机器名称为kf2test0一、kf2test0二、kf2test03,IP分别对应为172.28.23.180、172.28.23.18一、172.28.23.182。
分别在在各机器的/etc/hosts上加入:
172.28.23.180 kf2test01
172.28.23.181 kf2test02
172.28.23.182 kf2test03
Kf2test01切换到root后执行ssh kf2test02,若是无密码登陆就OK了,提示输入密码的话须要改成无密码登陆。其它机器作相同的链接测试,保证可以相互无密码登陆。
此时ulimit –n查看远端服务器最大文件数限制仍然为1024,会致使集群的从服务器最大只能建立1000个左右的模拟用户,须要在/etc/profile中加入:
ulimit -SHn 65535
在tsung测试压力前能够经过执行erl来测试集群是否成功,shell中执行erl:
>erl -rsh ssh -sname root -setcookie mycookie
Eshell V5.8.5 (abort with ^G)
(root@kf2test01)1>slave:start(kf2test02,root,"-setcookie mycookie").
若是返回ok则表示成功,以下:
{ok,root@kf2test02}
没法集群则会半天无反应,最后显示{error,timeout}。
配置好tsung后,修改jabber.xml配置:
<clients>
<client host="kf2test01" use_controller_vm="false" maxusers="60000">
<ip value="172.28.23.180"/>
</client>
<client host="kf2test02" use_controller_vm="false" maxusers="60000">
<ip value="172.28.23.181"/>
</client>
<client host="kf2test03" use_controller_vm="false" maxusers="60000">
<ip value="172.28.23.182"/>
</client>
</clients>
而后执行tsung –f jabber.xml进行集群压力测试。经过这样方式测试理论上能达到18W模拟用户。如下是测试输出报告:
Openfire性能优化的一些思考:
1.如今服务器链接并发量才1400多,经过加入链接管理器(CONNECTION MANAGER)实现大并发,前端须要加入负载均衡服务器(Load Banlancer)或DNS来实现分流。
2.Openfire直接链接数据库,须要加入memcached做为数据库缓存。
3.Openfire集群听说有性能问题,须要找到瓶颈。
4.服务器最终应选为CentOS,而非ubuntu。
前端