關於jboss的線程問題+java.lang.outofmemoryError

    近日來,用Jmeter做壓力測試。發現,每臺客戶機使用800個線程組壓力倍增。昨天的測試,到了今天下午都沒有跑完。
仔細觀察了下Jboss的錯誤日誌,發現,jboss已經宕機了。

    本身後臺的環境是使用LVS作的負載均衡。目前apache負載均衡器方面,已經沒有什麼問題了。修改的線程組達到1000。據資料顯示,apache默認的線程數是60,最高能達到1000
在http.conf中,加入下面模塊:

  1. <IfModule mpm_winnt.c>
  2. ThreadsPerChild 150
  3. MaxRequestsPerChild 1000
  4. Win32DisableAcceptEx    
  5. </IfModule>
根據 http://www.asymt.com/servers/windows/350.html 這篇文章所說,線程數超過170可能會導致內存不斷的增加。這個沒試過。我直接ThreadsPerChild 1000 MaxReqestPerChild 4000 暫時解決掉自己前面apache負載分配的壓力。

後端的Jboss服務器線程數設置比較麻煩。

  1. <Connector port="80" address="${jboss.bind.address}"
  2.          maxThreads="250" maxHttpHeaderSize="8192"
  3.          emptySessionPath="true" protocol="HTTP/1.1"
  4.          enableLookups="false" redirectPort="443" acceptCount="100"
  5.          connectionTimeout="20000" disableUploadTimeout="true"
  6.          compression="on" compressionMinSize="10"
  7.          compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  8.          />
這裏面原始的maxThreads分配爲250. 這個值最好設置成平時最大的並行線程數多25%.
acceptCount 是指超過maxThreads可接受的排隊數目

修改以上兩個線程數目後,繼續測試.. 



測試發現,原本正常運行的測試計劃。這次基本都跑死。控制檯報出 java.lang.outMemoryError:java heap space錯誤。在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。所以調整jvm的參數。

  1. set HEAP=-Xms1024m -Xmx1024m #堆內存池的大小值
  2. set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m #新對象產生時,分配的內存。最好爲最大對內存的四分之一
  3. set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% #新對象內存比例
  4. set TENURING=-XX:MaxTenuringThreshold=2
  5. set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
  6. set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m
調整適合的內存參數。


閱讀(92) | 評論(1) | 轉發(0) |
給主人留下些什麼吧!~~
09_avatar_small.jpg

exhalo2013-05-15 14:02:21

測試發現,是腳本錄製的問題。中間有太多不必要的請求,以至於堆溢出。所以錄製腳本的時候一定要檢查好,每個請求的內容

評論熱議
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章