2

奇妙な java.lang.OutOfMemoryError エラーが表示されます (以下の部分的なスタック トレース)。問題は、Java プロセスがクラッシュしないことです。ログにこのエラーが表示されますが、プロセスが停止しているように見えますが、終了しません。

ありがとう。

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:691)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1325)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.<init>(UploadMonitor.java:126)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:384)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:344)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:272)
4

2 に答える 2

5
java.lang.OutOfMemoryError: unable to create new native thread   

これは、アプリからネイティブ スレッドを作成できなくなったためです。

  1. アプリが生成しているスレッドの数を確認します。ほとんどの場合、これが犯人です。
    これを分析するためにスレッド ダンプを取得できます。

  2. 次に、スタック サイズを確認します。Xssparam はそれを提供します。微調整してみてください。

増やしXmxてもここでは役に立ちません。実際、32 ビット JVM では問題が悪化します。

プロセスが停止しない理由は、コメントで Jan が述べたように、Uncaught Exceptions がアプリケーション全体ではなく、独自のスレッドのみを終了するためです。

于 2012-12-15T12:23:30.513 に答える
2

OutOfMemoryError、またはそれに関するエラーは、JVM をクラッシュさせません。たとえば、エラーをキャッチしないスレッドが 1 つしかない場合 (とにかくあまり役​​に立ちません)、終了する可能性があります。JVM が終了しない場合は、とにかく不安定な状態になるため、再起動する必要があります。

于 2012-12-15T12:28:15.167 に答える