zoukankan      html  css  js  c++  java
  • 巧解Tomcat中JVM内存溢出问题

    你对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" 
  • 相关阅读:
    java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
    generate failed: Cannot resolve classpath entry: mysql-connector-java-5.1.38.jar
    Spring boot 零配置开发微服务
    【ABAP系列】SAP ABAP BAPI_REQUISITION_CREATE创建采购申请
    【ABAP系列】SAP ABAP 字符编码与解码、Unicode
    【ABAP系列】ABAP CL_ABAP_CONV_IN_CE
    【Fiori系列】浅谈SAP Fiori的设计美感与发展历程
    【Fiori系列】为什么SAP Fiori活的如此精致
    【ABAP系列】SAP ABAP下载带密码的Excel文件
    【ABAP系列】SAP ABAP 高级业务应用程序编程(ABAP)
  • 原文地址:https://www.cnblogs.com/smile361/p/4616693.html
Copyright © 2011-2022 走看看