通过执行一个简单的循环创建Thread java程序,当我使用-Xmx2048M时,AIX的线程数限制大约为900,当我将该参数减少到-Xmx1024M时,线程数限制增加到大约2000.而我的ulimit属性都是无限的: ulimit -a 时间(秒)无限制 文件(块)无限制 数据(千字节)无限制 堆栈(kbytes)无限制 内存(kbytes)无限制 coredump(积木)无限 nofiles(描述符)无限制 线程(每个进程)无限制 进程(每个用户)无限制
任何人都可以帮助我吗?谢谢
答案 0 :(得分:1)
我的猜测是你有一个32位的JVM,它有大约2.8 GB的虚拟内存(在OS保留和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
主题撰写的文章