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. 然后检查您的堆栈大小。Xss参数会给你。尝试调整它。

在这里增加Xmx对你没有帮助。事实上,在 32 位 JVM 上,它会加剧这个问题。

您的进程没有停止的原因是因为 Uncaught Exceptions 仅终止它们自己的线程,而不是 Jan 在评论中提到的整个应用程序。

于 2012-12-15T12:23:30.513 回答
2

OutOfMemoryError 或任何与此相关的错误不会导致 JVM 崩溃。例如,如果您只有一个没有捕获错误的线程(无论如何都不是很有用),它可能会退出。如果 JVM 不退出,无论如何它都会处于不稳定状态,应该重新启动。

于 2012-12-15T12:28:15.167 回答