仔細觀察了下Jboss的錯誤日誌,發現,jboss已經宕機了。
本身後臺的環境是使用LVS作的負載均衡。目前apache負載均衡器方面,已經沒有什麼問題了。修改的線程組達到1000。據資料顯示,apache默認的線程數是60,最高能達到1000
在http.conf中,加入下面模塊:
-
<IfModule mpm_winnt.c>
-
ThreadsPerChild 150
- MaxRequestsPerChild 1000
-
Win32DisableAcceptEx
- </IfModule>
後端的Jboss服務器線程數設置比較麻煩。
-
<Connector port="80" address="${jboss.bind.address}"
-
maxThreads="250" maxHttpHeaderSize="8192"
-
emptySessionPath="true" protocol="HTTP/1.1"
-
enableLookups="false" redirectPort="443" acceptCount="100"
-
connectionTimeout="20000" disableUploadTimeout="true"
-
compression="on" compressionMinSize="10"
-
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
- />
acceptCount 是指超過maxThreads可接受的排隊數目
修改以上兩個線程數目後,繼續測試..
測試發現,原本正常運行的測試計劃。這次基本都跑死。控制檯報出 java.lang.outMemoryError:java heap space錯誤。在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。所以調整jvm的參數。
-
set HEAP=-Xms1024m -Xmx1024m #堆內存池的大小值
-
set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m #新對象產生時,分配的內存。最好爲最大對內存的四分之一
-
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% #新對象內存比例
-
set TENURING=-XX:MaxTenuringThreshold=2
-
set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
- set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m