早上同事反映,mycat又假死了,估计还是内存溢出,查看了一下错误日志。

INFO   | jvm     | // :: | java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer67" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer68" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer69" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer70" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer71" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer72" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer74" java.lang.OutOfMemoryError: Java heap space
INFO | jvm | // :: | Exception in thread "Timer73" java.lang.OutOfMemoryError: Java heap space

堆内存溢出,以为是内存不足,但与前几天的报错又不一样

INFO   | jvm     | // :: | Exception in thread "$_MyCatServer" java.lang.OutOfMemoryError: Direct buffer memory
INFO | jvm | // :: | at java.nio.Bits.reserveMemory(Bits.java:)
INFO | jvm | // :: | at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:)
INFO | jvm | // :: | at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:)

而且,通过查看wrapper.conf,发现MaxDirectMemorySize已经设置为10G了,刚开始一直按默认2G来,偶尔会出现内存溢出。

wrapper.java.additional.=-XX:MaxDirectMemorySize=10G

后来,一高人指点,通过jmap -heap pid命令查看,发现MaxHeapSize=16MB

Heap Configuration:
MinHeapFreeRatio =
MaxHeapFreeRatio =
MaxHeapSize = (.0MB)
NewSize = (.25MB)
MaxNewSize = MB
OldSize = (.1875MB)
NewRatio =
SurvivorRatio =
PermSize = (.75MB)
MaxPermSize = (.0MB)
G1HeapRegionSize = (.0MB)

不科学啊,wrapper.conf中有关堆内存的设置没这么小啊

wrapper.java.additional.=-Xmx4G
wrapper.java.additional.=-Xms1G # Initial Java Heap Size (in MB)
wrapper.java.initmemory=4G # Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=15G

最后才发现,问题出在wrapper.java.initmemory=4G和wrapper.java.maxmemory=15G上了。

原来,这两个参数直接设置数值就可以了,因为它的单位已经已经指明了,为MB。

如果设置为15G,jvm会直接屏蔽掉后面的G,使用15,然后MaxHeapSize将会被设置为16MB(后来测试了一下,如果设置为17,MaxHeapSize则会被设置为18MB,至于为什么每次都分配为偶数,这个就不太清楚了)。

后来测试了一下,得出以下结论:

1. wrapper.java.maxmemory参数会覆盖wrapper.java.additional.10参数。

2. 即便wrapper.java.maxmemory的值超过了4096,MaxHeapSize最大为4096MB。

3. 如果堆大小要超过4096MB,可设置wrapper.java.additional.10,同时注释掉wrapper.java.maxmemory。

建议,只使用wrapper.java.additional.10=-Xmx4G和wrapper.java.additional.11=-Xms1G配置堆内存的大小。

总结:

mycat的启动方式有两种

1. mycat/bin/mycat start

这种方式会使用mycat/conf/wrapper.conf作为配置文件

通过 sh -x mycat start即可发现

+ eval '"/usr/local/mycat/bin/./wrapper-linux-x86-64"' '"/usr/local/mycat/conf/wrapper.conf"' wrapper.syslog.ident=mycat 'wrapper.pidfile="/usr/local/mycat/logs/mycat.pid"' wrapper.daemonize=TRUE 'wrapper.lockfile="/var/lock/subsys/mycat"'
++ /usr/local/mycat/bin/./wrapper-linux-x86- /usr/local/mycat/conf/wrapper.conf wrapper.syslog.ident=mycat wrapper.pidfile=/usr/local/mycat/logs/mycat.pid wrapper.daemonize=TRUE wrapper.lockfile=/var/lock/subsys/myca

2. mycat/bin/startup_nowrap.sh

这个脚本里面同样有关于jvm的配置

JAVA_OPTS="-server -Xms2G -Xmx2G -XX:MaxPermSize=64M  -XX:+AggressiveOpts -XX:MaxDirectMemorySize=2G"
# ./startup_nowrap.sh
"/usr/local/jdk1.7.0_79/bin/java" -DMYCAT_HOME="/usr/local/mycat" -classpath "/usr/local/mycat/conf:/usr/local/mycat/lib/classes:/usr/local/mycat/lib/curator-client-2.9.0.jar:/usr/local/mycat/lib/curator-framework-2.9.0.jar:/usr/local/mycat/lib/dom4j-1.6.1.jar:/usr/local/mycat/lib/druid-1.0.14.jar:/usr/local/mycat/lib/ehcache-core-2.6.11.jar:/usr/local/mycat/lib/fastjson-1.2.7.jar:/usr/local/mycat/lib/guava-18.0.jar:/usr/local/mycat/lib/jline-0.9.94.jar:/usr/local/mycat/lib/json-20151123.jar:/usr/local/mycat/lib/leveldb-0.7.jar:/usr/local/mycat/lib/leveldb-api-0.7.jar:/usr/local/mycat/lib/log4j-1.2.17.jar:/usr/local/mycat/lib/mapdb-1.0.7.jar:/usr/local/mycat/lib/mongo-java-driver-2.11.4.jar:/usr/local/mycat/lib/Mycat-server-1.5-GA.jar:/usr/local/mycat/lib/netty-3.7.0.Final.jar:/usr/local/mycat/lib/ojdbc14-10.2.0.3.0.jar:/usr/local/mycat/lib/sequoiadb-java-driver-1.0-20150615.070208-1.jar:/usr/local/mycat/lib/slf4j-api-1.7.12.jar:/usr/local/mycat/lib/slf4j-log4j12-1.7.12.jar:/usr/local/mycat/lib/snakeyaml-1.16.jar:/usr/local/mycat/lib/univocity-parsers-1.5.4.jar:/usr/local/mycat/lib/wrapper.jar:/usr/local/mycat/lib/xml-apis-1.0.b2.jar:/usr/local/mycat/lib/zookeeper-3.4.6.jar" -server -Xms2G -Xmx2G -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=2G org.opencloudb.MycatStartup >> "/usr/local/mycat/logs/console.log" >& &

后续-20160617

--------------------------------------------------------

通过mycat start启动失败,wrapper.log有如下报错信息:

STATUS | wrapper  | // :: | Launching a JVM...
ERROR | wrapper | // :: | Startup failed: Timed out waiting for a signal from the JVM.
ERROR | wrapper | // :: | JVM did not exit on request, terminated
INFO | wrapper | // :: | JVM exited on its own while waiting to kill the application.
STATUS | wrapper | // :: | JVM exited in response to signal SIGKILL ().

后来通过startup_nowrap.sh,发现可以启动成功。

在网上找了一把,可修改conf/wrapper.conf中设置如下参数:

#设置超时时间为2小时wrapper.startup.timeout=7200

#设置心跳超时时间为1小时wrapper.ping.timeout=3600

重新通过mycat start启动,启动成功~

 

MyCAT报java.lang.OutOfMemoryError: Java heap space的更多相关文章

  1. mycat 报错 java.lang.OutOfMemoryError: Java heap space

    今天排查mysql的错误日志发现  wrapper.log  中有如下错误日志 INFO   | jvm 1    | 2019/10/20 12:52:31 | java.lang.OutOfMem ...

  2. Tomcat报java.lang.OutOfMemoryError: Java heap space错误停止运行如何解决

    最近开发的一个商业项目,部署完成后,经常出现Tomcat挂掉的现象,报的异常是:java.lang.OutOfMemoryError: Java heap space,上网google了一下,了解了一 ...

  3. 【Xamarin报错】 COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java heap space

    Xamarin Android 编译报错: COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java ...

  4. Linux运行Java出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错

    在运行如下程序时出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错: java ...

  5. 解决sqoop报错:java.lang.OutOfMemoryError: Java heap space

    报错栈: -- ::, INFO [main] org.apache.sqoop.mapreduce.db.DBRecordReader: Executing query: = ) AND ( = ) ...

  6. 排查sqoop报错:Error running child : java.lang.OutOfMemoryError: Java heap space

    报错栈: -- ::, INFO [main] org.apache.hadoop.mapred.MapTask: Processing split: = AND = -- ::, INFO [mai ...

  7. Tomcat 启动项目报错 java.lang.OutOfMemoryError: Java heap space

    近日使用myeclipse 部署web项目,启动tomcat时报错: SEVERE: Error waiting for multi-thread deployment of directories ...

  8. eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space

    今天执行了一个比較大的程序,处理的数据达到126MB数据,将数据导入数据库中,用eclipse 来訪问时候,总是出现java.lang.OutOfMemoryError:Java heap space ...

  9. 关于java.lang.OutOfMemoryError: Java heap space的错误分析

    今天无意间遇到这个错误:java.lang.OutOfMemoryError: Java heap space 问题出现原因:使用a标签实现快速下载[当然已经实现了,但想了想还是要归纳解决这类问题] ...

随机推荐

  1. 第一次IT技术面试经历

    一.技术总监面试问题: 1.Hibernate的应用项目例举 2.jsp标签库例举 3.oracle的增删改查 4.关系型数据库的关联关系 5.数据库分页操作 二.技术总监面试问题: 1.for循环中 ...

  2. dubbo 常见错误

    1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 或 Caused by: java.lang.NoSuchMet ...

  3. 配置python环境变量(转)

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...

  4. 命令行操作svn和git和git

    前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...

  5. strcpy函数在VS2015无法使用的问题

    一:原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替 然而,strcpy_s并没有strcpy好用,我们要想继续在VS2015中使用strcpy该怎么办 呢 ...

  6. tomcat相关

    一.下面这篇文章介绍了tomcat log相关内容 http://blog.csdn.net/cowmich/article/details/8173005

  7. 热门的PHP框架

    每个PHP框架都拥有各自独特的地方.同时PHP语言已经获得了巨大的认同并且成为了世界上最通用的服务器脚本语言.PHP也俨然成为了最容易学习的web动态开发语言.在PHP发展的同时,PHP框架也迅速崛起 ...

  8. java学习笔记(2)

    上篇讲了一些概念之类的知识点,现在继续总结知识点: 1.用户自己在控制面板输入内容是如何实现的:java中有一个类可实现这个功能 类Scanner: import java.util.Scanner; ...

  9. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  10. Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)转

    原文地址  转自 %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: ...