我需要一些关于如何最好地调整我的内存设置以允许更多线程的输入。
我阅读了关于Java VM 可以支持多少线程?并遵循那里的java示例(dieLikeaDog),它确实有效,在死前产生了不到800个线程。
如上面的(dieLikeaDog 示例)链接中,代码使所有可以使用的线程,直到出现以下错误结果:java.lang.OutOfMemoryError:无法创建新的本机线程
在命令行上指定 Xss(例如 java -Xss104k dieLikeADog)不会改变创建的线程数。
我还尝试更改 -Xms 和 -Xmx 并没有更改它可以产生的线程数。
改变线程数的一件事是 my -u ulimit (用于最大用户进程)。使这个更大确实增加了线程的数量。
我的ulimit如下:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 46588
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我有点困惑,因为我从阅读其他示例中认为指定较小的 -Xss 应该会增加线程数。
是否还有其他事情阻止 Xss 工作?
万一这很重要,我在 64 位 fedora 15 系统上运行(带有 6 gigs 的 ram):
OS:
Linux
2.6.42.12-1.fc15.x86_64
amd64
JVM:
Sun Microsystems Inc.
Java(TM) SE Runtime Environment
Java HotSpot(TM) 64-Bit Server VM
1.6.0_27