zoukankan      html  css  js  c++  java
  • java.lang.OutOfMemoryError: PermGen space及其解决方法

    一、java.lang.OutOfMemoryError: PermGen space PermGen

    解决方法:

    手动设置MaxPermSize大小修改 TOMCAT_HOME/bin/catalina.sh  在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m

    建议:

    将相同的第三方jar文件移置到 tomcat/shared/lib 目录下,这样可以达到减少jar 文档重复占用内存的目的。

    在tomcat的catalina.bat的JAVA_OPTS 变量前设置JAVA_OPTS=" -XX:PermSize=97m -XX:MaxPermSize=256m″

    引起的原因是自定义ClassLoader重复加载了很多次相同的jar,所以只要避免重复加载同样的jar就可以解决问题了。

    所以可能的原因有:
    加载了太多的class
    加载了太多的jar
    重复加载了太多的jar

    具体的解决方法:
    1. 手动设置MaxPermSize的大小
    修改 TOMCAT_HOME/bin/catalina.bat(Linux上为catalina.sh)文件,
    在echo "using CATALINA_BASE:$CATALINA_BASE"上面加入这一行内容:

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



    catalina.sh修改如下:

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



    2.修改 TOMCAT_HOME/bin/catalina.bat文件的内容:

    在 %_EXECJAVA% %JAVA_OPTS% 后面添加:
    -Xms=256m -Xmx512m 
    注意哦,前后有空格的

    例如:%_EXECJAVA% %JAVA_OPTS% -Xms=256m -Xmx512m(空格),后面的内容不变

    3. 可以考虑将相同的第三方jar文件拷贝到tomcat/shared/lib 目录下,这样可以减少jar文件重复占用内存的。

    二、java.lang.OutOfMemoryError: Java heap space Heap size

    解决方法:

    手动设置Heap size 修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

    windows下修改JVM内存大小:
      情况一:解压版本的Tomcat, 要通过startup.bat启动tomcat才能加载配置
      要添加在tomcat 的bin 下catalina.bat 里
      rem Guess CATALINA_HOME if not defined
      set CURRENT_DIR=%cd%后面添加,红色的为新添加的.
      set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true
      
      情况二:安装版的Tomcat下没有catalina.bat
      windows服务执行的是bin omcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
      修改注册表HKEY_LOCAL_MACHINESOFTWAREApache Software FoundationTomcat Service ManagerTomcat5ParametersJavaOptions
      原值为
      -Dcatalina.home="C:ApacheGroupTomcat 5.0"
      -Djava.endorsed.dirs="C:ApacheGroupTomcat 5.0commonendorsed"
      -Xrs
      加入 -Xms300m -Xmx350m
      重起tomcat服务,设置生效
      jvm参数说明:
      -server 一定要作为第一个参数,启用JDK的server版本,在多个CPU时性能佳
      -Xms java Heap初始大小。 默认是物理内存的1/64。
      -Xmx java heap最大值。建议均设为物理内存的80%。不可超过物理内存。
      -Xmn java heap最小值,一般设置为Xmx的3、4分之一。
      -XX:PermSize 设定内存的永久保存区初始大小,缺省值为64M。
      -XX:MaxPermSize 设定内存的永久保存区最大大小,缺省值为64M。
      -XX:SurvivorRatio=2 生还者池的大小,默认是2。如
      -XX:NewSize 新生成的池的初始大小。 缺省值为2M。
      -XX:MaxNewSize 新生成的池的最大大小。 缺省值为32M。
      +XX:AggressiveHeap 让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
      -Xss 每个线程的Stack大小
      -verbose:gc 现实垃圾收集信息
      -Xloggc:gc.log 指定垃圾收集日志文件
      -XX:+UseParNewGC 缩短minor收集的时间
      -XX:+UseConcMarkSweepGC 缩短major收集的时间
      -XX:userParNewGC 可用来设置并行收集(多CPU)
      -XX:ParallelGCThreads 可用来增加并行度(多CPU)
      -XX:UseParallelGC 设置后可以使用并行清除收集器(多CPU)
  • 相关阅读:
    【原创】Zend Framework 2框架之MVC
    poj3101--Astronomy(分数的最小公倍数)
    【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素
    Java中&、|、&&、||详解
    编写webpack 插件
    Babel 入门教程
    Eslint 规则说明
    npm模块之http-proxy-middleware使用教程(译)
    sass和less的几点不同
    babel的使用(关于使用async报错的问题)
  • 原文地址:https://www.cnblogs.com/emanlee/p/5339381.html
Copyright © 2011-2022 走看看