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。
前端