性能问答>Java应用如何解决线程数逐渐增多导致OutOfMemoryError?>
6回复
1年前

Java应用如何解决线程数逐渐增多导致OutOfMemoryError?



当前应用中正常情况下都是300左右个线程在跑,运行一段时间(一般为一两天,有时是几小时不定)之后,线程数开始逐渐增加,到2000左右抛出java.lang.OutOfMemoryError: unable to create new native thread错误,系统中线程很多,如何才能排查定位到问题所在?

3137 阅读
请先登录,再评论

jstack -l <pid> 看下线程名称 一般如果是框架创建的线程都是有固定格式的,

如果确实是需要这么多线程可以修改允许用户最大进程(含线程)数
ulimit -u 32000

1年前
回复 MartinDai:

谢谢大佬👍

1年前回复

启动的线程太多了,建议用线程池

1年前

我们线上也出现过线程数激增的问题,这种问题一般是由代码导致的,如果是业务代码或者框架代码,最好用线程池创建,并且指定线程名称,如果再出问题,直接把线上的线程Dump打下来,然后分析看看是哪个线程一直创建,再具体到代码层面。

1年前

使用了线程池吗?

1年前

这个问题是已经超出了操作系统的线程数的大小限制,你可以使用jdk提供的工具进行分析。

1.如果你具有生产环境的操作权限,那么你可以直接使用命令行dump具体的线程查询那些线程
2.如果是没有权限的话,那么在项目启动参数中加上-XX:+HeapDumpOnOutOfMemoryError参数,将OOM时候的堆栈信息dump出来。然后scp到本地服务器,进行分析即可。

1年前