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了。(别忘了先备份一下注册表)

  • 相关阅读:
    初来乍到
    windows小技巧:远程桌面连接rdp文件
    CSS小试牛刀
    Windows phone 7之样式与模板
    Pulldowntorefresh a WP7 ListBox or ScrollViewer(向上向下的手势)
    Windows Phone 7 文件下载进度和速度显示
    WPF Binding
    wp7学习笔记(转)
    WP7 网络请求之WebClient
    Windows Phone Tilt effect on HubTile and other Controls
  • 原文地址:https://www.cnblogs.com/htys/p/4071393.html
Copyright © 2011-2022 走看看