より多くのスレッドを許可するようにメモリ設定を最適に調整する方法について、いくつかの入力が必要です。
Java VM はいくつのスレッドをサポートできますか?のポーズを読みました。そこにあるJavaの例(dieLikeaDog)に従いましたが、動作し、死ぬ前に800未満のスレッドを生成しました。
上記の (dieLikeaDog の例) リンクのように、次のエラーが発生するまで、コードは可能なすべてのスレッドを作成します: java.lang.OutOfMemoryError: Cannot create new native thread
コマンド ラインで Xss を指定しても (例: java -Xss104k dieLikeADog)、作成されるスレッドの数は変わりません。
-Xms と -Xmx も変更してみましたが、生成できるスレッドの数はどちらも変更しませんでした。
スレッドの数を変更したことの 1 つは、私の -u 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 ギガの 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