2015-08-18 63 views
4

我知道如何使用-Xss設置Java線程的堆棧大小,並將其用於我們的產品。Xss爲1個線程設置線程堆棧大小,對於所有線程的堆棧大小有什麼限制

但是,當我們的應用程序中使用了很多線程,並設置了-Xss(我們將其設置爲512k)。我們將遇到錯誤報告,無法創建新的本地線程。 它應該與堆棧大小有關,因爲當我們設置-Xss256k時,錯誤消失了。

我的問題是針對1個線程,Xss設置堆棧大小,但對於所有線程堆棧大小如何?
整個Thread的堆棧內存大小是多少? 我沒有找到這樣的JVM設置,而我們現在似乎遇到了這樣的問題。

+0

所有線程的堆棧大小都沒有Java設置。當本地平臺告訴您無法再創建更多線程時,您會看到它什麼時候用完。 – Kayaman

+0

我建議你看看一種優化線程的方式來減少堆棧使用,如果這是你的限制。我假設你不能只添加更多的內存。 –

+0

明白了,謝謝。所以它可能與創建線程時下劃線OS的能力有關。每個線程使用包括堆棧在內的資源,並且在某些情況下,不能創建更多線程。在我們的應用程序示例中,當堆棧大小爲512k並且創建100個線程無效時,堆棧大小爲256k的相同線程工作。我們正在編寫負載測試工具,並且每個線程的內容均由我們的用戶指定,因此無法優化線程。在這種情況下,似乎只有特殊的JVM實現和相關的操作系統限制。 –

回答

4

-Xss設置默認值爲每個新線程的堆棧保留的虛擬內存量。 (也就是說,對於沒有通過其構造函數給出顯式堆棧大小的每個新線程)。

沒有限制所有線程的合併的堆棧大小的選項。

如果設置-Xss從512K降低到256K使您的程序能夠創建更多的線程,那麼您的程序必須創建大量的線程。

這些線程都在做什麼?

您確定您無法使用線程池中的有限數量的線程來解決問題

+0

我們不能限制線程。我們的產品是一個負載測試工具,它確實需要大量的線程來生成測試服務器的負載 –

+1

但是這仍然是一個很好的答案,限制線程也應該是大多數其他面臨這種問題的解決方案。順便說一句:對於詹姆斯提到的單獨線程的集合堆棧:請參閱http://stackoverflow.com/questions/11507133/increasing-stack-space-of-a-single-worker-thread-in-java?rq=1 –

相關問題