outofmemoryerror: unable to create new native thread -买球官网平台

`
zhangyou1010
  • 浏览: 285611 次
  • 性别:
  • 来自: 北京
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 304)
    • ( 88)
    存档分类
    最新评论

    outofmemoryerror: unable to create new native thread

      博客分类:
    • java



     

     

    当看到这个错误时,第一感觉是创建的线程太多了、内存不够用了,把tomcat的堆由1g调整到2g后,该问题还

     

    是出现,网上有人说要把-xss参数调小,该参数是创建新线程时,分配的内存空间大小,调整了该值后,发现

     

    服务上还是会创建大量的线程,用jvisualvm监控到tomcat的线程情况如下图,其实如果经验丰富点的人,一看

     

    下面这图,就可能知道问题所在,但我还是折腾了蛮久,才找到原因。



     

    从上图,可以发现,产生了1002个线程,然后tomcat就outofmemoryerror了,据我所知,业务代码里面是有

     

    用到线程池的,找到线程池的代码,发现线程池的代码,是有限制线程数的。但是无法确定该线程池的线程

     

    数限制是否生效了,后面就给线程池加上自定义的线程名称,代码如下:

     public static class namedthreadfactory implements threadfactory
        {
            private final string basename;
            
            private final atomicinteger threadnum = new atomicinteger(0);
            
            public namedthreadfactory(string basename)
            {
                this.basename = basename;
            }
            
            @override
            public synchronized thread newthread(runnable r)
            {
                thread t = executors.defaultthreadfactory().newthread(r);
                
                t.setname(basename   "-"   threadnum.getandincrement());
                
                return t;
            }
        }

     

    然后初始化线程池:

    executorservice service = executors.newfixedthreadpool(200, new namedthreadfactory("threadpoolutil-threadpool"));

     

     

    再通过监控发现,我命名了的线程,确实只创建我指定数量的线程,但是,

    pool-127-thread-1

     

    这种线程还是一直在创建,但是仔细查看代码,没有发现其他使用线程池的地方。

     

    该类线程的dump信息如下:



     

    根据dump信息,也无法知道哪块代码创建的线程,正当我准备根据dump信息里面的代码信息,去远程

     

    debug时,热心的朋友提示我,

    pool-127-thread-1

     

    表示的意思是第127个线程池,里面有一个线程,然后,他说,这一般是通过executors类产生的,我马上在

     

    代码中搜索executors,果不其然,在某业务的父类中发现一实例变量:

     

    private  executorservice executor = executors.newfixedthreadpool(1);

     

    可以肯定就是这行代码导致的,每次创建该类的实例,都会新增一个线程池,线程池大小为1,把实例变量改为类变量后,同时

     

    给线程池加上命名,重新部署到服务器上后,问题解决。

     

    private static executorservice executor = executors.newfixedthreadpool(1, new namedthreadfactory(
            "basexxxxx-threadpool"));

     

    总结一下,发现自己对多线程这块,还是不够熟悉,对一些概念,也是一知半解,所以,要学习的还有很多很多。

    • 大小: 280.4 kb
    • 大小: 15 kb
    • 大小: 209.9 kb
    分享到:
    评论
    1 楼 2013-11-28  
    已经不错了

    相关推荐

      问题分析:java.lang.outofmemoryerror unable to create new native thread - ado1986 - csdn1

      搜集整理关于java错误处理:java.lang.outofmemoryerror: java heap space java.lang.outofmemoryerror: java heap space 资料整理

      java.lang.outofmemoryerror: java heap space 解决方法

      caused by: java.lang.outofmemoryerror: permgen space买球软件推荐的解决方案, avax.servlet.servletexception: java.lang.outofmemoryerror: permgen space at org.apache.jasper.servlet.jspservlet.service(jspservlet.java...

      tomcat内存溢出总结 在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和... 3.outofmemoryerror: unable to create new native thread.

      null 博文链接:https://geyubin.iteye.com/blog/779330

      jberet是。 它还包含在在java ee环境中提供可移植批处理支持。...并可能在某些计算机上引起内存错误: outofmemoryerror: unable to create new native thread增加ulimit以避免此类错误。 例如, uli

      jvm内存详解,理解 jvm 如何使用 windows 和 linux 上的本机内存

      解决outofmemoryerror: permgen space,过程是痛苦的,结果是舒畅的

      java.lang.outofmemoryerror: permgen space

      java.lang.outofmemoryerror: permgen space 买球软件推荐的解决方案

      java虚拟机outofmemoryerror:java heap space堆dump文件,可以直接用来分析。

      java.lang.outofmemoryerror: permgen space及其解决方法,解决项目太大tomcat内存溢出

      tomcat给我的java.lang.outofmemoryerror: permgentomcat给我的java.lang.outofmemoryerror: permgentomcat给我的java.lang.outofmemoryerror: permgentomcat给我的java.lang.outofmemoryerror: permgentomcat给我的...

      3.outofmemoryerror: unable to create new native thread. tomcat内存溢出买球软件推荐的解决方案 对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-xms -xmx -xx:permsize -xx:...

      tomcat内存溢出的解决方法(java.util.concurrent.executionexception:java.lang.outofmemoryerror),内附买球软件推荐的解决方案!

      outofmemoryerror的8种经典案例,java heap space、gc overhead limit exceeded、permgen space、metaspace、unable to create new native thread、out of swap space?、requested array size exceeds vm limit、...

      java解决nested exception is java.lang.outofmemoryerror java heap space 解决oom

      tomcat内存溢出解决办法,错误信息:java.lang.outofmemoryerror:permgen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat

    global site tag (gtag.js) - google analytics