`

Tomcat内存设置 解决PermGen space

阅读更多

 

在使用 Java 程序从数据库中查询大量的数据或是应用服务器 ( tomcat jboss,weblogic) 加载 jar 包时会出现 java.lang.OutOfMemoryError 异常。这主要是由于应用服务器的内存不足引起的。这种异常常有以下几种情况(以下以 tomcat 环境为例,其它 WEB 服务器如 jboss,weblogic 等是同一个道理):  
   1. java.lang.OutOfMemoryError: PermGen space  
   PermGen space 的全称是 Permanent Generation space ,是指内存的永久保存区域 OutOfMemoryError: PermGen space 。从文字上看就是内存溢出,解决方法是加大内存。为什么会内存溢出,这是由于这块内存主要是被 JVM 存放 Class Meta 信息的, Class 在被 Load 的时候被放入 PermGen space 区域,它和存放 Instance Heap 区域不同 ,GC(Garbage Collection) 不会在主程序运行期对 PermGen space 进行清理,所以如果你的 APP LOAD 很多 CLASS 的话,就很可能出现 PermGen space 错误。这种错误常见在 web 服务器对 JSP 进行 pre compile 的时候。如果你的 WEB APP 下都用了大量的第三方 jar, 其大小超过了 jvm 默认的大小 (4M) 那么就会产生此错误信息了。  
  解决方法: 手动设置 MaxPermSize 大小  
   a. 如果 tomcat 是以 bat 方式启动的,则如下设置:  
  修改 TOMCAT_HOME/bin/catalina.sh  
  在 “echo "Using CATALINA_BASE: $CATALINA_BASE"” 上面加入以下行:  
   set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=512m -XX:MaxPermSize=512m
   b. 如果 tomcat 是注册成了 windows 服务,以 services 方式启动的,则需要修改注册表中的相应键值。  
  打开注册表,找到目录 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java ,其中目录地址中红色标注的(如 htfty )需要根据不同情况作修改,为 tomcat 服务注册成 windows 服务的名称。 可以看到 JvmMs JvmMx 项,其中 JvmMs 设置最小的内存使用参数, JvmMx 设置最大的内存使用参数。设置好 JvmMs JvmMx 项的值,重启 tomcat 服务器即可生效。  
  建议:将相同的第三方 jar 文件移置到 tomcat/shared/lib 目录下,这样可以达到减少 jar 文档重复占用内存的目的。  
   2. java.lang.OutOfMemoryError: Java heap space  
   JVM 堆的设置是指 java 程序运行过程中 JVM 可以调配使用的内存空间的设置。 JVM 在启动的时候会自动设置 Heap size 的值,其初始空间 ( -Xms) 是物理内存的 1/64 ,最大空间 (-Xmx) 是物理内存的 1/4 。可以利用 JVM 提供的 -Xmn -Xms -Xmx 等选项可进行设置。 Heap size 的大小是 Young Generation Tenured Generaion 之和。在 JVM 中如果 98 %的时间是用于 GC 且可用的 Heap size 不足 2 %的时候将抛出此异常信息。  
  解决方法:手动设置 Heap size  
   a. 如果 tomcat 是以 bat 方式启动的,则如下设置:  
  修改 TOMCAT_HOME/bin/catalina.sh  
  在 “echo "Using CATALINA_BASE: $CATALINA_BASE"” 上面加入以下行:  
   set JAVA_OPTS=-Xms512m -Xmx512m
   b. 如果 tomcat 是注册成了 windows 服务,以 services 方式启动的,则需要修改注册表中的相应键值。  
  打开注册表,找到目录 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\htfty\Parameters\Java ,其中目录地址中红色标注的(如 htfty )需要根据不同情况作修改,为 tomcat 服务注册成 windows 服务的名称。 可以看到 JvmMs JvmMx 项,其中 JvmMs 设置最小的内存使用参数, JvmMx 设置最大的内存使用参数。设置好 JvmMs JvmMx 项的值,重启 tomcat 服务器即可生效。  
  提示: Heap Size 最大不要超过可用物理内存的 80 %,一般的要将 -Xms -Xmx 选项设置为相同,而 -Xmn 1/4 -Xmx 值。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics