zoukankan      html  css  js  c++  java
  • PermGen space错误解决方法

    在看下文之前,首先要确认意见事情,就是你是怎样启动tomcat的,我们在平时的开发环境其中,都是通过startup.bat方式启动tomcat的,那么你依照以下的方式,去改动/bin/catalina.bat是没有问题的。可是假设你是生产环境下,我们一般都希望使用windows服务方式去启动tomcat,此时之前改动的配置文件是没实用的。由于windows服务启动tomcat不再去载入catalina.bat其中的參数了,而是去载入注冊表中的參数,所以我们须要改动注冊表。

    HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Procrun 2.0/Tomcat_APPNAME/Parameters/Java,改动JvmMs和JvmMx的值,当前我都将其设定为1024,也就是1个G的容量。详细性能再后面继续观察。 之前还真不知道windows服务启动和startup.bat启动的差别。 windowsserver启动是在注冊表中载入參数,startup.bat启动是在catalina.bat载入參数。

    1.參考:

    http://blog.csdn.net/fox009/article/details/5633007

    http://hi.baidu.com/like_dark/blog/item/19c1948b3292b0799f2fb468.html

    http://anyeeye.iteye.com/blog/444624

    Tomcat6性能调优 出现java.lang.OutOfMemoryError: PermGen space

    http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

    2.报错:

    Exception in thread "DispatcherThread" java.lang.OutOfMemoryError: PermGen space
    Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
    Exception in thread "State Saver" java.lang.OutOfMemoryError: PermGen space
    Exception in thread "AWT-Windows" java.lang.OutOfMemoryError: OutOfMemoryError

    3.原因:

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序执行期对PermGen space进行清理,所以假设你的应用中有非常多CLASS的话,就非常可能出现PermGen space错误,这样的错误常见在webserver对JSP进行pre compile的时候。假设你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。

    4.解决方法1: 

    手动设置MaxPermSize大小,假设是linux系统,改动TOMCAT_HOME/bin/catalina.sh,假设是windows系统,改动TOMCAT_HOME/bin/catalina.bat,
    在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面添�下面行:
    JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
    建议:将同样的第三方jar文件移置到tomcat/shared/lib文件夹下,这样能够达到降低jar 文档反复占用内存的目的。

    5.解决方法2

    改动eclipse.ini文件,改动例如以下:

    复制代码
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms128m
    -Xmx512m
    -XX:PermSize=64M 
    -XX:MaxPermSize=128M
    复制代码

    假设还报错,能够考虑例如以下改动

    复制代码
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms512m
    -Xmx1024m
    -XX:PermSize=256M 
    -XX:MaxPermSize=512M
    复制代码

    报错:

    复制代码
    2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
    严重: The web application [/Application] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
    2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
    严重: The web application [/Application] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
    2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
    严重: The web application [/Application] appears to have started a thread named [AWT-Windows] but has failed to stop it. This is very likely to create a memory leak.
    2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
    严重: The web application [/Application] appears to have started a thread named [Thread-14] but has failed to stop it. This is very likely to create a memory leak.
    2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
    严重: The web application [/Application] created a ThreadLocal with key of type [net.sf.json.AbstractJSON$1] (value [net.sf.json.AbstractJSON$1@3661eeb]) and a value of type [java.util.HashSet] (value [[]]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
    2011-11-21 21:10:50 org.apache.catalina.core.ApplicationContext log
    信息: Initializing Spring FrameworkServlet 'Dispatcher'
    复制代码

    改动catalina.bat

    加入�

    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
    -server -Xms1536m -Xmx1536m
    -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
    -XX:MaxPermSize=256m -XX:+DisableExplicitGC"

    例子

    复制代码
    #   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension
    #                   (JSSE) installation, whose JAR files will be added to the
    #                   system class path used to start Tomcat.
    #
    #   CATALINA_PID    (Optional) Path of the file which should contains the pid
    #                   of catalina startup java process, when start (fork) is used
    #
    # $Id: catalina.sh 609438 2008-01-06 22:14:28Z markt $
    # -----------------------------------------------------------------------------
     
    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m 
    -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
    -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
     
     
    # OS specific support.  $var _must_ be set to either true or false.
    cygwin=false
    os400=false
    darwin=false
    case "`uname`" in
    CYGWIN*) cygwin=true;;
    OS400*) os400=true;;
    Darwin*) darwin=true;;
    esac
     
    # resolve links - $0 may be a softlink
    PRG="$0"
    复制代码

    详细參数依据自己机器情况而定

    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m 
    -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
    -XX:MaxPermSize=256m -XX:+DisableExplicitGC"

     

  • 相关阅读:
    配置域名服务器报错named[822]: dns_rdata_fromtext /etc/bind/db.asertest.com mail not a valid number
    Cookie/Session机制详解
    java中一个数组不能放不同数据类型的值
    javascript中 (function(){})();如何理解?
    图表实现基于SVG或Canvas
    千层饼图 年轮图
    element select下拉框绑定number类型
    Vue和JQuery相比,除了节省了开发成本,还有什么优点?
    前端领域的BEM到底是什么
    js数组操作find查找特定值结合es6特性
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3828497.html
Copyright © 2011-2022 走看看