zoukankan      html  css  js  c++  java
  • nested exception is java.lang.OutOfMemoryError: PermGen space

     生产环境:jdk1.6和tomcat6,部署了3个项目,而且用到大量的第三方jar包。在部署第四个项目的时候,运行了一天,第四个项目抛出java.lang.OutOfMemoryError:PermGen space。

            抛出异常java.lang.OutOfMemoryError: PermGen space 。网上查找资料,解释为:

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

            安装版tomcat解决方法:手动设置MaxPermSize大小。网上多为修改配置文件的方式。我的操作系统是windows xp, 用tomcat本身提供的工具(Configure Tomcat)就可以设置。如下图所示,在java options中加入红色方框中的两行语句即可。通过命令行参数-XX:PermSize和-XX:MaxPermSize设置该区域的大小,数值应根据机器实际内存大小来定。注:每行命令前后不要有空格,否则会导致tomcat启动失败。

     最近在公司做了一个j2ee+tomcat的小项目,涉及到tomcat加载类的内存配置,网上搜了半天,再经过自己总结,终于知道怎么一回事了,下面分享一下我的经验,有不对的地方大家可以一起讨论。

    Tomcat的启动分为startupo.bat启动和注册为windows服务的启动,下面一一说明。

    1.startup.bat启动

    在tomcat_home/bin目录下找到catalina.bat,用文本编辑器打开,加上下面一行:

    set JAVA_OPTS= -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=256M

    放到rem ----- Execute The Requested Command ---------------------------------------下面即可。

    解释一下各个参数:

    -Xms1024M:初始化堆内存大小(注意,不加M的话单位是KB)

    -Xmx1029M:最大堆内存大小

    -XX:PermSize=256M:初始化类加载内存池大小

    -XX:MaxPermSize=256M:最大类加载内存池大小

    -XX:MaxNewSize=256M:这个还不清楚哈,有知道的说声

    还有一个-server参数,是指启动jvm时以服务器方式启动,比客户端启动慢,但性能较好,大家可以自己选择。

    2.windows服务启动

           如果你的tomcat是注册为windows服务并且是以服务方式启动的,那么上面的方法就无效了,因为这时tomcat启动是读取注册表的参数,而不是读取批处理文件的参数,这时我们有两种方法来设置jvm参数。

    第一种比较简单,tomcat为我们提供了一个设置启动参数的窗体,双击tomcat_home/bin目录下的tomcat6w.exe,如图

    Tomcat启动内存设置 - 一个人失眠 - 渴望

    下方的Initial memory pool就是初始化堆内存大小,Maximun memory pool是最大堆内存大小。

    而要设置Perm Gen池的大小就要在Java Option里面加参数了,在里面加上:

    -Dcatalina.base=%tomcat_home%

    -Dcatalina.home=%tomcat_home%

    -Djava.endorsed.dirs=%tomcat_home%endorsed

    -Djava.io.tmpdir=%tomcat_home% emp

    -XX:PermSize=256M

    -XX:MaxPermSize=256M

    -XX:ReservedCodeCacheSize=48M

    -Duser.timezone=GMT+08

    (PS:网上说每一行后面不要有空格,没试过)

    第二种方法是打开注册表->HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationProcrun 2.0Tomcat6ParametersJava(路径可能有一点点差别)

    Tomcat启动内存设置 - 一个人失眠 - 渴望

    修改Options的值,把刚才上面那些参数加进去就OK了。(别忘了先备份一下注册表)

  • 相关阅读:
    May 1 2017 Week 18 Monday
    April 30 2017 Week 18 Sunday
    April 29 2017 Week 17 Saturday
    April 28 2017 Week 17 Friday
    April 27 2017 Week 17 Thursday
    April 26 2017 Week 17 Wednesday
    【2017-07-04】Qt信号与槽深入理解之一:信号与槽的连接方式
    April 25 2017 Week 17 Tuesday
    April 24 2017 Week 17 Monday
    为什么丑陋的UI界面却能创造良好的用户体验?
  • 原文地址:https://www.cnblogs.com/htys/p/4071393.html
Copyright © 2011-2022 走看看