0

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

任何人都可以帮助我吗?谢谢

4

1 回答 1

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

于 2012-08-05T07:38:02.950 回答