2015-08-18 45 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 –

相关问题