network 发表于 2018-12-1 12:38:30

Linux和windows下内存溢出以及修改tomcat的jvm内存

  一、内存溢出概述
  常见的内存溢出有以下两种:
  java.lang.OutOfMemoryError: PermGen space
  java.lang.OutOfMemoryError: Java heap 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)那么就会产生此错误信息了。
  解决方法: 手动设置MaxPermSize大小
  建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar文档重复占用内存的目的。
  ②java.lang.OutOfMemoryError: Java heap space

  JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。JVM在启动的时候会自动设置Heap>
  解决方法:手动设置Heap>  二、修改JVM内存
  此处以tomcat环境为例,其它WEB服务器原理相似。
  ①Linux下修改JVM内存大小
  在tomcat的bin下的catalina.sh里,位置cygwin=false前添加:
  # OS specific support. $var _must_ be set to either true or false.
  JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
  cygwin=false
  表示初始化内存为256MB,可以使用的最大内存为512MB。
  ②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/tomcat.exe读取注册表中的值,而不是catalina.bat的设置
  修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Tomcat Service Manager/Tomcat5/Parameters/JavaOptions
  原值为
  -Dcatalina.home="C:/ApacheGroup/Tomcat 5.0"
  -Djava.endorsed.dirs="C:/ApacheGroup/Tomcat 5.0/common/endorsed"
  -Xrs
  加入-Xms300m -Xmx350m
  重起tomcat服务,设置生效。
  更详细的介绍请参看http://blog.csdn.net/yougou_sully/article/details/6457570#reply

页: [1]
查看完整版本: Linux和windows下内存溢出以及修改tomcat的jvm内存