【问题标题】:Xss set thread stack size for 1 thread, what is the limitation for all thread's stack sizeXss为1个线程设置线程堆栈大小,所有线程的堆栈大小限制是多少
【发布时间】: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


【解决方案1】:

-Xss 设置为每个新线程的堆栈保留的默认虚拟内存量。 (也就是说,对于每个没有通过其构造函数给出显式堆栈大小的新线程。)

没有选项可以限制所有线程的组合堆栈大小。

如果将 -Xss 从 512K 降低到 256K 可以让您的程序创建更多线程,那么您的程序肯定会创建大量线程。

所有这些线程在做什么?

您确定不能在线程池中使用有限数量的线程解决问题吗?

【讨论】:

  • 我们不能限制线程。我们的产品是一个负载测试工具,它确实需要大量线程来为要测试的服务器生成负载
  • 但这仍然是一个很好的答案,对于大多数面临此类问题的其他人来说,限制线程也应该是解决方案。顺便说一句:对于詹姆斯提到的单独线程的集合堆栈:请参阅stackoverflow.com/questions/11507133/…
猜你喜欢
  • 2011-07-27
  • 2011-05-08
  • 1970-01-01
  • 2011-02-02
  • 2014-09-21
  • 2017-12-11
  • 2020-10-17
  • 2014-11-03
  • 1970-01-01
相关资源
最近更新 更多