【问题标题】:java thead count limit in AIX?AIX 中的 java 线程数限制?
【发布时间】:2012-08-05 04:00:28
【问题描述】:

通过执行一个简单的循环创建线程 java 程序,当我使用 -Xmx2048M 时,AIX 的线程数限制约为 900,而当我将该参数减小到 -Xmx1024M 时,线程数限制增加到 2000 左右。我的ulimit 属性都是无限的: ulimit -a 时间(秒)无限制 文件(块)无限 数据(千字节)无限 堆栈(千字节)无限 内存(千字节)无限 核心转储(块)无限 nofiles(描述​​符)无限制 线程(每个进程)无限 进程(每个用户)无限制

有人可以帮助我吗?谢谢

【问题讨论】:

  • 减少线程堆栈,进程可能达到虚拟内存限制。我猜默认堆栈大小(-Xss)是 1MB,
  • 我尝试使用 -Xss32K ,但结果和以前一样。
  • 你不能用这么低的堆栈,试试128KB以上的东西

标签: java aix


【解决方案1】:

我猜你有一个 32 位 JVM,它的虚拟内存限制约为 2.8 GB(在操作系统保留和 JVM 库之后)。如果每个线程使用大约 900 KB,则使用 2 GB 堆会为大约 900 个线程留下虚拟内存。如果您将堆大小减少到 1 GB,这将为大约 2000 个线程留下足够的虚拟内存。

尝试使用 64 位 JVM,因为我猜你有一个 64 位操作系统(32 位操作系统往往有一个下限),或者减少最大堆栈大小。

在大多数操作系统上,64 位 JVM 被限制为大约 1 TB,我发现您可以在遇到一些限制之前创建大约 32K 线程(我还没弄清楚是什么)

这是我为 Linux http://vanillajava.blogspot.co.uk/2011/07/java-what-is-limit-to-number-of-threads.html 写的一篇关于该主题的文章

【讨论】:

  • 感谢回复,我真的用的是32位的JVM,但是我试过Xss32k或者Xss8K,结果总是在900左右...
  • 这应该有帮助。添加了指向我写的关于该主题的文章的链接。
  • 8k-32k 是完全不可接受的低堆栈值。我猜它只是恢复到默认的 1MB 然后
猜你喜欢
  • 2019-03-15
  • 2013-01-17
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多