你对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"”上面加入以下行:

setJAVA_OPTS=%JAVA_OPTS%-server
-Xms800m-Xmx800m-XX:MaxNewSize=256m
setJAVA_OPTS=%JAVA_OPTS%-server
-Xms800m-Xmx800m-XX:MaxNewSize=256m

或修改catalina.sh

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

JAVA_OPTS="$JAVA_OPTS-server-Xms800m
-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"”上面加入以下行:

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

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

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

catalina.sh下为:

JAVA_OPTS="$JAVA_OPTS-server
-XX:PermSize=128M-XX:MaxPermSize=512m"
JAVA_OPTS="$JAVA_OPTS-server
-XX:PermSize=128M-XX:MaxPermSize=512m"

巧解Tomcat中JVM内存溢出问题的更多相关文章

  1. Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)

    来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...

  2. Tomcat中JVM内存溢出及合理配置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...

  3. Tomcat的JVM内存大小如何设置?【转】

    [转]:专家答疑 Tomcat的JVM内存大小如何设置? 本文和大家重点讨论一下如何设置Tomcat的JVM内存大小,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存 ...

  4. jvm内存溢出问题

     Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 J ...

  5. Tomcat常见的内存溢出,以及解决方法

    一.常见的三种内存溢出错误: 1.java.lang.OutOfMemoryError:java heap space    ====JVM Heap(堆)溢出 JVM再启动的时候回自动设置JVM H ...

  6. JVM内存溢出及合理配置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...

  7. 定位JVM内存溢出问题思路总结

    JVM的内存溢出问题,是个常见而有时候有非常难以定位的问题.定位内存溢出问题常见方法有很多,但是其实很多情况下可供你选择的有效手段非常有限.很多方法在一些实际场景下没有实用价值.这里总结下我的一些定位 ...

  8. Tomcat中JVM参数设置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进 ...

  9. jvm内存溢出问题的定位方法

    jvm内存溢出问题的定位方法 今天给大家带来JVM体验之内存溢出问题的定位方法. 废话不多说直接开始: 一.Java堆溢出 测试代码如下: import java.util.*; public cla ...

随机推荐

  1. LA 3905 Meteor

    给出一些点的初始位置(x, y)及速度(a, b)和一个矩形框,求能同时出现在矩形框内部的点数的最大值. 把每个点进出矩形的时刻分别看做一个事件,则每个点可能对应两个事件,进入事件和离开事件. 按这些 ...

  2. 51nod1364 最大字典序排列

    不断的在cur的后面找最大的符合条件的数扔到cur的前面. 用线段树维护操作就可以了. #include<cstdio> #include<cstring> #include& ...

  3. BZOJ 1555 KD之死

    贪心,按t+w排序维护不一定放到拖车上的大根堆. #include<iostream> #include<cstdio> #include<cstring> #in ...

  4. LeetCode Reverse Linked List II 反置链表2

    题意:将指定的一段位置[m,n]的链表反置,返回链表头. 思路:主要麻烦在链表头,如果要从链表头就开始,比较特殊. 目前用DFS实现,先找到m-1的位置,再找到n+1的位置,中间这段就是否要反置的,交 ...

  5. Python [Leetcode 342]Power of Four

    题目描述: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Examp ...

  6. POJ 1942 Paths on a Grid

    // n*m 的格子 从左下角走到右上角的种数// 相当于从 n+m 的步数中选 m 步往上走// C(n+m,m) #include <iostream> #include <st ...

  7. 垂直的TextView

    所先声明一下这个类是我从网上找到的一篇文章,只是保留并没有侵权的意思. public class TextViewVertical extends View { public static final ...

  8. Amarino例程无法使用的问题

    Serial.begin(9600); 而不是用它的57600

  9. Android开发如何在4.0及以上系统中自定义TitleBar

    本文将通过一个实例讲解怎么实现在4.0及以上系统版本中实现自定义TitleBar,这只是我自己找到的一种方法; xml布局文件 activity_main.xml <RelativeLayout ...

  10. FastJson只序列化java对象的部分属性

    public class Student { private int id; private String name; private int age; //get set方法略 } 如下方法: St ...