Openfire性能優化與壓力測試小結

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。

前端

相關文章
相關標籤/搜索