【发布时间】:2011-10-18 21:07:04
【问题描述】:
我的目标是提出可以并行运行的最大线程数。谷歌向我指出了许多链接,它们通过划分 RAM/StackSize 给出了简单的数学计算。在 64 位 Linux 中,我们将线程堆栈大小定义为 10 MB(ulimit -s = 10240kb),RAM 为 4GB,为操作系统留出 1 GB 空间,根据这个数学计算,我可以拥有大约 300 个线程,但我的测试应用程序很小写到〜32297,然后给出内存不足错误。
我用 -Xss 尝试了不同的值,但这些值对线程数几乎没有任何影响,它仍然与 ~32297 相同)。
这给我的印象是堆栈大小是可变的,由操作系统决定,并在需要时达到我们定义的最大值,但无论我在哪里阅读,它们的堆栈大小都是静态的
我到底错过了什么?
【问题讨论】:
-
你可能会被内核限制为mentioned here
-
您可以拥有与处理器或内核一样多的线程来真正并行运行。否则,JVM 调度程序会随意交错它们。
-
@Joachim :我读了这篇文章,谢谢..你能否建议我的情况是线程最大变量(其值为 81920)背后的决定因素,堆栈大小为 10 MB,RAM 为 4国标。无法通过数学计算得到这些数字
-
stackoverflow.com/questions/34452302/… - 完成所有这些检查后解决了我的问题。
标签: java linux multithreading jvm stack-size