巧解Tomcat中JVM内存溢出问题

开发 后端
这里向大家描述一下Tomcat的JVM内存溢出问题的解决方法,有一个项目需要把把数据库从mysql移植到oracle,可是当把jdbc连接指向oracle的时候,tomcat就连续抛java.lang.OutOfMemoryError的错误。

你对Tomcat 的JVM内存溢出问题的解决方法是否了解,这里和大家分享一下,相信本文介绍一定会让你有所收获。

tomcat 的JVM内存溢出问题的解决

最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle的时候,tomcat就连续抛java.lang.OutOfMemoryError的错误,上网google了一下,了解了一下tomcat的运行机制,也解决了问题,share出来,以备查。下面有几种JVM内存溢出的现象和解决方法,请看详细介绍。

1、JVM内存溢出现象提示一:java.lang.OutOfMemoryError:Javaheapspace

解释:

Heapsize设置

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heapsize的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn-Xms-Xmx等选项可进行设置。Heapsize的大小是YoungGeneration和TenuredGeneraion之和。

提示:在JVM中如果98%的时间是用于GC且可用的Heapsize不足2%的时候将抛出此异常信息。

提示:HeapSize最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:

手动设置Heapsize

修改TOMCAT_HOME/bin/catalina.bat,在“echo"UsingCATALINA_BASE:$CATALINA_BASE"”上面加入以下行:
Java代码 

  1. setJAVA_OPTS=%JAVA_OPTS%-server
  2. -Xms800m-Xmx800m-XX:MaxNewSize=256m 
  3. setJAVA_OPTS=%JAVA_OPTS%-server
  4. -Xms800m-Xmx800m-XX:MaxNewSize=256m 

或修改catalina.sh

在“echo"UsingCATALINA_BASE:$CATALINA_BASE"”上面加入以下行: 

  1. JAVA_OPTS="$JAVA_OPTS-server-Xms800m  
  2. -Xmx800m-XX:MaxNewSize=256m"  

2、JVM内存溢出现象提示二:java.lang.OutOfMemoryError:PermGenspace

原因:
PermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGenspace错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEBAPP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:

1.手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.bat(Linux下为catalina.sh),在Java代码
“echo"UsingCATALINA_BASE:$CATALINA_BASE"”上面加入以下行: 

  1. setJAVA_OPTS=%JAVA_OPTS%-server
  2. -XX:PermSize=128M-XX:MaxPermSize=512m 
  3.  

“echo"UsingCATALINA_BASE:$CATALINA_BASE"”上面加入以下行: 

  1. setJAVA_OPTS=%JAVA_OPTS%-server  
  2. -XX:PermSize=128M-XX:MaxPermSize=512m 

catalina.sh下为:

Java代码 

  1. JAVA_OPTS="$JAVA_OPTS-server  
  2. -XX:PermSize=128M-XX:MaxPermSize=512m"  
  3. JAVA_OPTS="$JAVA_OPTS-server  
  4. -XX:PermSize=128M-XX:MaxPermSize=512m"  

【编辑推荐】

  1. JVM内存泄漏问题产生及检测方案
  2. 探究JVM1.6与JVM1.5性能差距
  3. 揭秘Java内存泄露与溢出的区别
  4. 全面认识Eclipse中JVM内存设置
  5. JVM启动参数中标准参数列表速查手册

 

责任编辑:佚名 来源: lampchina.net
相关推荐

2021-03-06 10:25:19

内存Java代码

2021-02-03 15:12:08

java内存溢出

2010-09-17 13:45:40

JVM termina

2023-08-29 11:38:27

Java内存

2022-03-25 09:01:16

CSS溢出属性

2018-05-15 08:44:44

TensorFlowKeras内存

2010-09-27 10:20:09

JVMLinux

2012-05-15 02:04:22

JVMJava

2010-10-08 15:53:42

2009-07-08 15:31:58

MyEclipse 设

2009-08-11 09:16:00

2023-03-03 12:37:50

JavaJVM内存溢出

2011-12-15 16:55:04

TomcatJavajsp

2019-12-10 08:59:55

JVM内存算法

2015-12-28 11:41:57

JVM内存区域内存溢出

2021-12-24 10:17:54

Java数据时间戳

2009-07-06 14:35:26

JVM可用内存JSP

2009-08-16 16:11:05

2020-08-10 17:49:25

JVM内存溢出

2011-08-25 10:50:32

SQL Server数Performance
点赞
收藏

51CTO技术栈公众号