zoukankan      html  css  js  c++  java
  • java.lang.OutOfMemoryError: unable to create new native thread 居然是MQ问题

    问题

    开发环境,之前一直正常,某天突然用tomcat启动项目后时不时报如下错误:

     java.lang.OutOfMemoryError: unable to create new native thread

    环境介绍:

    项目是用的 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 和项目外,外部依赖的一些其它 小服务 也可能是产生问题的罪魁祸首。

  • 相关阅读:
    navicat常用快捷键与SQL基本使用
    【Excel实战】公式应用:如何按照某种类型数量排序
    Typora+Markdown便捷发布blog
    【Vulnhub】DC-2靶机
    【转载】阮一峰网络日志中的JWT入门
    【动态规划】闫氏dp分析
    Markdown Latex数学公式
    【每日一题】两个数组的交集
    【每日一题】前k个高频元素
    HashMap的各种遍历和删除方式总结
  • 原文地址:https://www.cnblogs.com/libin6505/p/7851703.html
Copyright © 2011-2022 走看看