java.lang.OutOfMemoryError: unable to create new native thread 居然是MQ问题
Posted 戈博小刀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.OutOfMemoryError: unable to create new native thread 居然是MQ问题相关的知识,希望对你有一定的参考价值。
问题:
开发环境,之前一直正常,某天突然用tomcat启动项目后时不时报如下错误:
环境介绍:
项目是用的 Eclipse+Tomcat + activeMQ
activeMQ用的本地的windows版本,黑窗口启动。
具体这个错误的上面报出的大异常是 JMS Exception。
因为是用的 spring,所以MQ消息处理部分报错都是先抛出 JMSException,然后往下看才是 内存溢出,不能创建本地线程。
具体显示异常发生在 MQ接收消息的 监听器中的: session.createConsumer(session.createQueue(queueName)) 以及 onMessage方法中。
尝试解决无果:
因为 onMessage方法中用了多线程处理业务逻辑,所以一开始 主观认为是 线程创建太多导致的,于是各种百度,找到的方法都是说
虚拟机内存配置等等。结果各种配置Eclipse都无效,很是郁闷。
尝试解决正确分析:
然后和其他同事比较Eclipse等环境配置,首先确保配置一样的情况下,还是一样有问题。
分析:
出问题的部分代码一直都未改动,之前整个办公环境都是正常的,
现在同样的代码,同样的环境配置,别人那还不出问题。
那就有可能是 和其他人不一样的地方出的问题,想到MQ是用的自己本机的,报的错误也是MQ部分的,虽然是在Eclipse中报错,但已经排除了Eclipse环境的问题,那么是不是本机的MQ有问题。
真正解决方法:
于是,关掉MQ,找到MQ的目录,查看data目录下的几个log日志文件,发现里面果真都报错了,于是清空data目录下的所有东西,重新去bin目录中启动bat文件。
在Eclipse中重启项目,问题解决了。
启示:
1、大家说的不一定就是对的,百度说的不一定就全面准确,具体问题具体分析很重要。
2、遇到难以解决的问题,如果百度等通用方法无效,那么要回过头仔细分析 报错的异常提示,注意整个异常的提示,尤其是开头部分,对提示中的多个点都进行分析尝试往往能够找到问题。
3、找问题还是用一步一步的逐个排除法来缩小范围比较靠谱。【最好有明确的分析 排除 顺序,先排除容易操作的】
4、除了Eclipse 和项目外,外部依赖的一些其它 小服务 也可能是产生问题的罪魁祸首。
以上是关于java.lang.OutOfMemoryError: unable to create new native thread 居然是MQ问题的主要内容,如果未能解决你的问题,请参考以下文章