当前位置: 首页 > 知识库问答 >
问题:

排除异常OutOfMemoryError:无法创建新的本机线程[重复]

陶福
2023-03-14

我有一个Ubuntu 16.04.5服务器,运行多个Java应用程序作为根。应用程序经常(大约每30分钟到1小时)从一个OutOfMemoryError崩溃:无法创建新的本机线程。我注意到应用程序不会单独崩溃,而是多个应用程序同时崩溃。

我不知道是什么导致了这一点,我很难找到我需要改变什么来解决这个问题。

我阅读了一些关于错误的文章,并分析了多种可能的原因,但它们似乎不适用于我的情况:

应用程序定期创建线程,但许多线程也会死亡。这意味着并发线程数不会超过10k。我通过生成线程转储和计算线程来检查我是否有失控线程创建的问题,但是线程的数量从未超过前面提到的10k。

当我运行uLimited-u时,它返回1546669

这应该够了吧?

我使用大约7GB的16GB内存。这是我的htop观点:

Java版本:

错误的完整错误堆栈跟踪:

java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:717)
    at de.domisum.lib.auxilium.util.java.ThreadUtil.createAndStartThread(ThreadUtil.java:126)
    at de.domisum.lib.auxilium.util.java.ThreadUtil.createAndStartThread(ThreadUtil.java:114)
    at de.domisum.lib.auxilium.run.RunNotifyOnTimeout.run(RunNotifyOnTimeout.java:32)
    at de.domisum.lib.auxilium.util.ticker.Ticker.tickWithTimeout(Ticker.java:119)
    at de.domisum.lib.auxilium.util.ticker.Ticker.run(Ticker.java:108)
    at java.lang.Thread.run(Thread.java:748)

来自发生以下错误的应用程序的线程转储:线程转储

垃圾收集器日志:gc log1 gc log2 gc log3

共有1个答案

姬欣怡
2023-03-14

迁移到Java11之后,这个问题就消失了。

 类似资料: