文档章节

Openfire性能优化与压力测试小结

今幕明
 今幕明
发布于 2014/09/24 14:32
字数 1135
阅读 3658
收藏 12

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了。

以三台测试机(可以用虚拟机采用桥接模式)为例,假设机器名称为kf2test01、kf2test02、kf2test03,IP分别对应为172.28.23.180、172.28.23.181、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。

本文转载自:http://note.youdao.com/share/?id=efde1171b948baa86d4c2e70c97ef3b4&type=note

今幕明
粉丝 46
博文 229
码字总数 39350
作品 0
朝阳
程序员
私信 提问
基于openfire的webIM的实现机制想法

目前webIM的openfire的实现方式,基本上分成以下几种 smack+dwr,js端采用定时轮询的方式,从web服务器中将xml取回来. 通过flash技术,连接到openfire服务器。 通过bosh技术直连到openfire服务...

林桦
2013/08/15
0
2
Openfire 性能优化

Openfire 是一个XMPP协议的IM Server。 基于MINA的java nio服务器。 一般就是使用mysql来作为数据库,保存配置配置信息、离线信息、用户数据。 官网的数据是支持5000人同时在线,使用connect...

今幕明
2016/08/26
29
1
Tsung 测试XMPP协议,如何判断操作是否成功

@古月楼 你好,想跟你请教个问题:现在公司对openfire进行的二次开发,需要用Tsung 测试下,5000人在线互发消息的压力情况: 前提: openfire部署在无桌面的centos下 问题: 1、如何判断所有...

dede1986
2014/10/29
1K
5
用smack模拟登录openfire,进行压力测试

@Juno5460 你好,想跟你请教个问题: 如何用smack模拟登录openfire,进行压力测试的?求相关代码,谢谢。

xiaolei368
2012/11/23
2K
3
终端是否保存本地聊天记录

1、我觉得首先openfire要保存完整的数据(聊天漫游),但是分布式的情况下,openfire保存聊天记录的方案,要看看,数据库如果不在一起会不会有问题,不过分布式情况下,数据库可以是中心的,...

Tequlia
2015/01/27
5
0

没有更多内容

加载失败,请刷新页面

加载更多

Flutter移动端实战手册

该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/d27c1f5ee3ff iOS接入Flutter 在进行iOS和Flutter的混编时,iOS比Android的接入方式略复杂,但也...

刘小壮
26分钟前
0
0
测试环境项目一键部署

git项目测试环境一键部署脚本 #!/bash/sh pid=`ps -ef | grep 'user_demo.jar' | grep -v grep | awk '{print $2}'` kill -9 $pid #跳转到git clone下目录 cd /home/apple/userdemo/ #拉取最......

ccman996
29分钟前
0
0
应用框架(spring-boot参数配置与使用)

这很耳东先生
35分钟前
0
0
使用SecureCRT从windows上传文件到Linux

点击File,然后选择SFTP,打开SFTP,然后进行下列操作。 1.指定文件所在路径 lcd E:\ 2.查看当前windows文件所在路径 lpwd 3.指定linux下文件上传路径 cd /usr/local 4.查询当前linux文件上传...

大雁南飞了
38分钟前
1
0
前后端分离-前端搭建(Vue)(3)加入Element和axios

继续上篇博客的Vue刚刚搭建完 , https://my.oschina.net/u/4116654/blog/3064431 这次我们来把Element 和axios弄好 首先先安装Element 下载好了之后 在src目录下的main.js里去添加Element的...

咸鱼-李y
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部