`

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 值。

分享到:
评论
发表评论

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

相关推荐

    解决OutOfMemoryError: PermGen space

    ### 解决OutOfMemoryError: PermGen space 在Java应用程序运行过程中,可能会遇到...本文提供的解决方案包括调整PermGen space的大小、优化代码、使用JConsole监控内存等,希望能帮助开发者们快速定位并解决问题。

    Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError PermGen space的解决方案

    解决 Eclipse 中通过 Tomcat 运行 J2EE 项目 java.lang.OutOfMemoryError PermGen space 的关键是增加 JVM 的内存空间,通过添加合适的参数,可以避免 PermGen space 溢出,确保项目的稳定运行。

    Caused by: java.lang.OutOfMemoryError: PermGen space解决方案

    总之,"java.lang.OutOfMemoryError: PermGen space"错误是由于Java虚拟机的 PermGen 区域内存不足造成的,可以通过增大 PermGen 区域的大小、升级JVM版本、优化类加载和库的使用等方式来解决。对于任何内存管理问题...

    java.lang.OutOfMemoryError: PermGen space及其解决方法

    ### Java.lang.OutOfMemoryError: PermGen space 及其解决方法 #### 一、PermGen space 概述 在Java虚拟机(JVM)中,PermGen space(永久代)是用于存储类的信息、常量、静态变量等数据的区域。在Java 8之前,Perm...

    java.lang.OutOfMemoryError: PermGen space解决方案

    java.lang.OutOfMemoryError: PermGen space 解决方案

    解决JVM中得PermGen spac问题

    解决 JVM 中的 PermGen space 问题 PermGen space(Permanent Generation space)是 JVM 中的一块永久保存区域,用于存放 Class 和 Meta 信息。当应用程序加载 Class 时,Class 就会被放入 PermGen space 区域中,...

    PermGen space

    在Java虚拟机(JVM)中,PermGen Space,全称Permanent Generation Space,是用于存储类的元数据、常量池、字符串常量等非实例对象数据的一个内存区域。与普通对象的堆空间不同,PermGen Space主要负责存储类的结构...

    OutOfMemoryError-PermGen-space-的解决方案亲测有效

    ### OutOfMemoryError: PermGen space 错误详解与解决方案 #### 一、问题背景及症状 在开发或运行基于Java的应用程序时,有时会遇到一个常见的错误提示:“OutOfMemoryError: PermGen space”。该错误通常发生在...

    tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space

    tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat

    Java内存不足PermGen space错误探究.pdf

    Java内存不足PermGen space错误通常出现在Java程序运行过程中,尤其是当Java EE服务器(如Tomcat、JBoss等)加载WAR或EAR包时。这个错误的根本原因在于Java虚拟机(JVM)的永久代(Permanent Generation Space)内存...

    Tomcat多应用时遇到的PermGen SPACE问题

    NULL 博文链接:https://eastzhang.iteye.com/blog/1788854

    TOMCAT内存大小调整

    OutOfMemoryError: PermGen space异常是由于 PermGen space 内存溢出引起的。解决方法是手动设置MaxPermSize大小。在Tomcat以bat方式启动时,需要修改TOMCAT_HOME/bin/catalina.sh文件,加入以下行:`JAVA_OPTS="-...

    解决Eclipse Tomcat OutOfMemoryError:PermGen space的问题

    总的来说,遇到`OutOfMemoryError: PermGen space`问题时,首先要分析应用是否频繁加载大量类或使用大量库,然后通过增大 PermGen 区域的大小来解决。此外,升级到Java 8及以上版本也是一个有效的解决方案,因为这些...

    Tomcat给我的java.lang.OutOfMemoryError: PermGen

    本文将针对两种常见的Java内存溢出错误——`java.lang.OutOfMemoryError: PermGen space`和`java.lang.OutOfMemoryError: Java heap space`进行详细的分析和解决方案的探讨。 首先,我们来看`java.lang....

    修改tomcat内存大小.txt

    3. **-XX:PermSize**:表示JVM永久代(PermGen space)初始大小。例如`-XX:PermSize=64M`表示JVM永久代初始大小为64MB。注意,从JDK 8开始,永久代被元空间(Metaspace)所替代。 4. **-XX:MaxPermSize**:表示JVM...

Global site tag (gtag.js) - Google Analytics