早上同事反映,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. AngularJS中的route可以控制页面元素的改变,使多页面变成一个单页面。。。

    SPA(Single Page Application)指的是通单一页面展示所有功能,通过Ajax动态获取数据然后进行实时渲染,结合CSS3动画模仿原生App交互,然后再进行打包(使用工具把Web应用 ...

  2. PL/SQL Developer如何连接64位的Oracle图解

    在64位Win7系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他 ...

  3. PHP的数组排序函数

    <?php class order{ /** * * 数组排序 * @param array $arr 例如: * array ( array ( 'deskId' => '460646' ...

  4. 前端开发神器sublime Text

    实用的sublime插件集合 – sublime必备插件 前言 入前端领域开始,就学着使用sublime,一直用起来很顺手,速度是我最欣赏的,快的没有编辑器可以匹敌.还是废话不多扯,入正题.好多有多少 ...

  5. 纯CSS3制作超级漂亮又实用的加载小图标

    先来一张各种效果的预览图,其实代码并不复杂,关键看自己如何运用. <!doctype html> <head> <meta charset="utf-8&quo ...

  6. Mimikatz 使用Tips

    1.记录 Mimikatz输出: C:\>mimikatz.exe ""privilege::debug"" ""log sekurl ...

  7. JAVA笔试题集(一)--JAVASE部分

    红色答案为参考答案 1.从下列选项中选择正确的Java表达式(多选) A.  int k=new String("aa");       B.  String str=String ...

  8. C/C++_date&time

    在标准C/C++中与日期和时间相关的数据结构 注意:年份是实际年份与  1900  的差值 我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: #ifndef _TM_DEFIN ...

  9. 详解Maple如何公式推导和生成代码

    公式推导 直观自然的数学表达式,智能的关联菜单,交互式助手等协助您从容通过推导过程,让您更容易地完成解决方案的开发,快速.无错! 分析 Maple 内置超过大量的计算函数,包括积分变换,微分方程求解器 ...

  10. win7 64位下 mongodb安装及命令运行

    有网友老催我把框架加上mongodb的支持,于是偶尔抽空看了看相关的文章. 今天有缘,就把mongodb安装了一下,中间遇到了小小的问题,So,把整个过程记录一下: 1:先上官网:http://www ...