为了账号安全,请及时绑定邮箱和手机立即绑定

不规则 OutOfMemoryError 故障排除:无法创建新的本机线程

不规则 OutOfMemoryError 故障排除:无法创建新的本机线程

牛魔王的故事 2023-02-16 16:04:24
我有一个 Ubuntu 16.04.5 服务器,它以 root 身份运行多个 Java 应用程序。应用程序定期(大约每 30 分钟到 1 小时)从OutOfMemoryError: unable to create new native thread. 我注意到,应用程序不会单独崩溃,而是多个应用程序同时崩溃。我不知道是什么原因导致的,而且我无法找出我需要更改的内容来解决此问题。我关注了一些关于该错误的文章并经历了多种可能的原因,但它们似乎并不适用于我的情况:修复线程创建率应用程序定期创建线程,但许多线程也会死掉。这意味着并发线程数永远不会超过 10k。我通过生成线程转储和计数线程来检查是否存在线程创建失控的问题,但线程数从未超过前面提到的 10k。增加操作系统的线程限制当我运行时ulimit -u它返回1546669。这应该够了吧?为机器分配更多 RAM我使用了大约 7GB 的可用 16GB RAM。这是我的 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)来自出现错误的应用程序的线程转储:thread dump垃圾收集器日志:gc log1 gc log2 gc log3
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

迁移到 Java 11 后问题消失了。



查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信