你对Tomcat 的JVM内存溢出问题的解决方法是否了解这里和大家分享一下相信本文介绍一定会让你有所收获
tomcat 的JVM内存溢出问题的解决
最近在熟悉一个开发了有几年的项目需要把数据库从mysql移植到oracle首先把jdbc的连接指向mysql打包放到tomcat里面可以跑起来没有问题可是当把jdbc连接指向oracle的时候tomcat就连续抛javalangOutOfMemoryError的错误上网google了一下了解了一下tomcat的运行机制也解决了问题share出来以备查下面有几种JVM内存溢出的现象和解决方法请看详细介绍
JVM内存溢出现象提示一javalangOutOfMemoryError:Javaheapspace
解释
Heapsize设置
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置JVM在启动的时候会自动设置Heapsize的值其初始空间(即Xms)是物理内存的/最大空间(Xmx)是物理内存的/可以利用JVM提供的XmnXmsXmx等选项可进行设置Heapsize的大小是YoungGeneration和TenuredGeneraion之和
提示在JVM中如果%的时间是用于GC且可用的Heapsize不足%的时候将抛出此异常信息
提示HeapSize最大不要超过可用物理内存的%一般的要将Xms和Xmx选项设置为相同而Xmn为/的Xmx值
解决方法
手动设置Heapsize
修改TOMCAT_HOME/bin/catalinabat在echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
Java代码
setJAVA_OPTS=%JAVA_OPTS%server
XmsmXmxmXX:MaxNewSize=m
setJAVA_OPTS=%JAVA_OPTS%server
XmsmXmxmXX:MaxNewSize=m
或修改catalinash
在echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
JAVA_OPTS=$JAVA_OPTSserverXmsm
XmxmXX:MaxNewSize=m
JVM内存溢出现象提示二javalangOutOfMemoryError:PermGenspace
原因
PermGenspace的全称是PermanentGenerationspace是指内存的永久保存区域这块内存主要是被JVM存放Class和Meta信息的Class在被Loader时就会被放到PermGenspace中它和存放类实例(Instance)的Heap区域不同GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理所以如果你的应用中有很CLASS的话就很可能出现PermGenspace错误这种错误常见在web服务器对JSP进行precompile的时候如果你的WEBAPP下都用了大量的第三方jar其大小超过了jvm默认的大小(M)那么就会产生此错误信息了
解决方法
手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalinabat(Linux下为catalinash)在Java代码
echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
setJAVA_OPTS=%JAVA_OPTS%server
XX:PermSize=MXX:MaxPermSize=m
echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
setJAVA_OPTS=%JAVA_OPTS%server
XX:PermSize=MXX:MaxPermSize=m
catalinash下为
Java代码
JAVA_OPTS=$JAVA_OPTSserver
XX:PermSize=MXX:MaxPermSize=m
JAVA_OPTS=$JAVA_OPTSserver
XX:PermSize=MXX:MaxPermSize=m