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

jopen 10年前發布 | 93K 次閱讀 Openfire 電話/通訊/IM聊天

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。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!