【发布时间】:2015-11-11 02:07:18
【问题描述】:
我知道如何使用 -Xss 为 java 线程设置堆栈大小,我们在我们的产品中使用它。
但是当我们的应用程序中使用了很多线程时,并且设置了 -Xss(我们设置为 512k 以供我们使用)。我们将遇到错误报告无法创建新的本机线程。 它应该与堆栈大小有关,当我们设置 -Xss256k 时,错误消失了。
我的问题是针对 1 个线程,Xss 设置堆栈大小,但是对于所有线程堆栈大小如何?
整个线程的总堆栈内存大小的限制是什么?
我没有找到这样的 JVM 设置,而我们现在似乎遇到了这样的问题。
【问题讨论】:
-
没有针对所有线程的堆栈大小的 Java 设置。当原生平台告诉你它不能创建更多线程时,你会看到它何时用完。
-
如果这是您的限制,我建议您考虑一种优化线程以减少使用堆栈的方法。我认为您不能只添加更多内存。
-
知道了,谢谢。所以它可能与创建线程时下划线操作系统的能力有关。每个 Threads 使用包括 stack 在内的资源,并且在某些情况下,不能创建更多线程。在我们的应用示例中,当堆栈大小为 512k 并且创建 100 个线程将不起作用,而堆栈大小为 256k 时,相同的线程可以工作。我们正在编写负载测试工具,每个线程的内容都是由我们的用户指定的,所以无法优化线程。在这种情况下,似乎只是特殊的 JVM 实现和相关的操作系统限制。
-
为了解决我们的问题,用户需要使用更强大的机器,或者使用更少的线程或堆栈等。
标签: java multithreading stack jvm-arguments