0

単純なループ create Thread Java プログラムを実行すると、 -Xmx2048M を使用すると、AIX によるスレッド数の制限は約 900 になり、そのパラメーターを -Xmx1024M に減らすと、スレッド数の制限は約 2000 に増加します。そして、私の ulimit 属性はすべて 無制限: ulimit -a 時間 (秒) 無制限のファイル (ブロック) 無制限のデータ (キロバイト) 無制限のスタック (キロバイト) 無制限のメモリ (キロバイト) 無制限のコアダンプ (ブロック) 無制限のファイル (記述子) 無制限のスレッド (プロセスごと) 無制限のプロセス (プロセスごと)ユーザー) 無制限

誰でも私を助けることができますか?ありがとう

4

1 に答える 1

1

私の推測では、仮想メモリが約 2.8 GB に制限されている 32 ビット JVM があると思います (OS 予約済みおよび JVM ライブラリ後)。各スレッドが約 900 KB を使用する場合、2 GB のヒープを使用すると、約 900 スレッド用の仮想メモリが残ります。ヒープ サイズを 1 GB に減らすと、約 2000 スレッドに十分な仮想メモリが残ります。

また、64 ビット OS (32 ビット OS には下限がある傾向がある) を使用していると推測されるため、64 ビット JVM を使用するか、最大スタック サイズを減らしてみてください。

64 ビット JVM はほとんどの OS で約 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 に答える