2012-01-16 75 views
1
set JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=256m -server 

這種說法在工作的JBoss的run.bat但我想增加堆棧大小我已經添加 -Xss512m 但它不工作的run.bat中。集JAVA_OPTS在JBoss中

set JAVA_OPTS=-Xms256m -Xss512m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=256m -server 

它有什麼問題嗎?

+0

「它不工作」 - 基於你說什麼? – adarshr 2012-01-16 12:48:41

+3

聖牛Xss512m!那麼Xss512k呢?或Xss2048k。這是爲每個線程分配的堆棧大小! – aayoubi 2012-01-16 12:50:50

回答

2

-Xss512m選項將每個線程堆棧的大小增加爲到512 MB。太瘋狂了。我期望這是導致 JBoss內存不足。

爲什麼要首先增加堆棧大小?大多數情況下,默認的堆棧大小應該沒問題。如果不是足夠大,然後有一個很好的機會,無論是:

  • 你必須在你的程序是導致無限遞歸(和增加堆棧大小不會幫助)或錯誤..

  • 您正在使用具有病態情況的算法(並且增加堆棧大小是一個bandaid)。


根據您的意見,我猜您正在使用正則表達式來解析包含多條記錄的整個輸入文件。正則表達式引擎使用遞歸來處理重複元素/組。

假設這是問題,那麼修復就是重寫你的解析代碼。

+0

當我嘗試在我的系統上批量上傳客戶時,我正面臨着這個錯誤。對於300位客戶,系統工作正常,但是如果我試圖上傳1000左右的客戶,則會拋出異常。如果存在無限循環,那麼系統也不適用於300。糾正我,如果我錯了。 – chetan 2012-01-16 14:03:48

0

VM中的每個線程都獲得堆棧。堆棧大小將限制您可以擁有的線程數量,堆棧大小過大,並且由於每個線程分配的內存比需要的多,因此內存不足。 source

顯然-Xss512m太大了。嘗試更小的值,要小得多:-Xss2048k