7
回答
linux tomcat报错:java.lang.OutOfMemoryError: unable to create new native thread

诸位好:

       楼主的服务器上设置的内存如下:

      JAVA_OPTS="-Xms1624m -Xmx1624m  -XX:PermSize=1024m -XX:MaxPermSize=1024m"

       然后tomcat中有大约45个站点,

      经常死,尝试调整上边的参数,换成2048直接启动不了...

   

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
       现在在考虑更换成apache+tomcat会不会好些?是不是因为tomcat下全部配置的service,apache下配置的是<host>会有线程上的区别? @红薯 @皮总 @滔哥 @逝水fox @姐夫 @光头程序员 @铂金小猪 @蟋蟀哥哥      


tomcat报错日志如下:

Exception in thread "http-bio-1105-Acceptor-0" java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:640)
        at java.util.concurrent.ThreadPoolExecutor.addIfUnderCorePoolSize(ThreadPoolExecutor.java:703)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:652)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:176)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:156)
        at org.apache.tomcat.util.net.JIoEndpoint.processSocket(JIoEndpoint.java:512)
        at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:229)
        at java.lang.Thread.run(Thread.java:662)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 1057464 bytes for Chunk::new
# An error report file with more information is saved as:



举报
枫爱若雪
发帖于6年前 7回/12K+阅
共有7个答案 最后回答: 6年前

参考下这个:https://code.google.com/p/hatter-source-code/wiki/Study_Java_HotSpot_OOME

是不是线程创建太多了,调小-Xss试试

引用来自“HatterJiang”的答案

参考下这个:https://code.google.com/p/hatter-source-code/wiki/Study_Java_HotSpot_OOME

是不是线程创建太多了,调小-Xss试试

恩,应该是线程太多了,但是不知道程序在哪个地方启动了多个线程,想换成apache试试

引用来自“Wentasy”的答案

这个错很正常,内存泄露就会出现这个问题。要么是并发量过高,要么是程序有问题。
程序可能有问题,但是不知道怎么去问题所在,现在是考虑是不是apache+tomcat创建的线程会比nginx+tomcat少?
如果单纯要提高性能,不做修改程序,可换64位系统,加大内存,并配置-Xss试试
--- 共有 1 条评论 ---
dedenj从配置看,应该是64位系统 6年前 回复
回复 @dede.g :
哦,1624m的,应该是64位的,但是楼主说2048启动不了,我以为是位数不够。
java.lang.OutOfMemoryError: unable to create new native thread;一般这种错误我碰到最多的是由于线程占用了系统太多的内存(线程不仅仅占用JAVA内存,还会占用系统内存),导致系统内存不足,调整-Xss一般可以解决这个问题。
另外建议先看下JAVA占用内存的比重,如果java程序占用的内存不多,但是线程占用太多内存,建议降低java内存的启动,多留一些内存给系统使用。
顶部