我需要一些關於如何最好地調整我的內存設置以允許更多線程的輸入。爲什麼-Xss不增加創建的線程數量?
我通過How many threads can a Java VM support?上的構成閱讀並遵循java中的例子(dieLikeaDog),它確實有效,它在死亡之前產生了800個線程。
如在(例如dieLikeaDog)以上的鏈接,該代碼使得它可以在所有線程,直到下面的錯誤的結果:java.lang.OutOfMemoryError:無法在命令創建新的本地線程
指定XSS行(例如java -Xss104k dieLikeADog)不會更改創建的線程數。
我也嘗試更改-Xms和-Xmx,並且都沒有改變它可能產生的線程數量。
改變線程數的一件事是我-u ulimit(用於最大用戶進程)。做得更大,確實增加了線程的數量。
我ulimits如下:
$ 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系統上運行(與RAM的6場音樂會):
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
死亡的原因是什麼?也許只是沒有足夠的記憶?嘗試增加-Xmx –
好問題。正如我上面所說的,我嘗試更改-Xms和-Xmx,並且不改變它可能產生的線程數量。在上面的(dieLikeaDog示例)鏈接中,代碼創建了所有可能的線程,直到出現以下錯誤:java.lang.OutOfMemoryError:無法創建新的本機線程 –
看起來像是某種東西(不是線程)誰吃了所有的內存。爲了確保,嘗試-Xms可以減少線程的堆棧內存。嘗試使用內存分析工具找出生豬。 –