`

java出现[Heap size],[PermGen space],[Java heap space ]的解决方法

 
阅读更多

//首先检查程序有没有限入死循环 排除程序本身的问题

答案大致有这两种解决方法:
1、设置环境变量

解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
添加:JAVA_OPTS= '-Xms32m -Xmx512m'
可以根据自己机器的内存进行更改。

2、java -Xms32m -Xmx800m className
就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。(包括包名)
这个解决问题了。而且执行的速度比没有设置的时候快很多。

如果在测试的时候可能会用Eclispe 这时候就需要在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m这个参数就可以了。

后来在Eclilpse中修改了启动参数,在VM arguments 加入了-Xms32m -Xmx800m,问题解决。

一、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大小

修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS='-XX:PermSize=64M -XX:MaxPermSize=128m'
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

二、java.lang.OutOfMemoryError: Java heap space
Heap size 设置
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 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

三、实例,以下给出1G内存环境下java jvm 的参数设置参考:

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

很大的web工程,用tomcat默认分配的内存空间无法启动,如果不是在myeclipse中启动tomcat可以对tomcat这样设置:

TOMCAT_HOME\bin\catalina.bat 中添加这样一句话:

     

          set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m

如果要在myeclipse中启动,上述的修改就不起作用了,可如下设置:

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的

Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m

以上是转贴,但本人遇见的问题是:在myeclipse中启动Tomcat时,提示"ava.lang.OutOfMemoryError: Java heap space",解决办法就是:

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的

Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m

挺灵的。
---------------------------------------------------------
tomcat 启动内存设置
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置
三、实例,以下给出1G内存环境下java jvm 的参数设置参考:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:
NewSize=192m -XX:MaxNewSize=384m"
CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m
-XX:NewSize=192m -XX:MaxNewSize=384m"
Linux:
在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh
添加:JAVA_OPTS='-Xms512m -Xmx1024m'
要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..
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服务,设置生效

 

==================================================================

 

 

tomcat作为windows服务的参数配置,特别是PermSize的设置
当tomcat用startup.bat启动的时候的参数设置网上说的比较多,这里就不再描述。

当tomcat作为windows的系统服务的时候,网上找了很多相关的文章,都没有比较全面的参数设置方法,一般就说明了一下xms和xmx的设置,都没有提供其他方面参数的说明,不够实用。经过对apache下的procrun的研究和多次试用,总算清楚了一般参数的设置方法。其实 tomcat5.exe本身已经包含有procrun的功能,这就是很多人在网上找不到procrun.exe文件下载的原因。
procrun可以参考:http://commons.apache.org/daemon/procrun.html
注:这里用tomcat5作为例子,应该同样适用于tomcat6.

这里不使用注册表,我们用tomcat提供的gui工具来设置。
1、在命令行下执行:tomcat5w.exe //ES//TomcatService
其中,TomcatService就是你加入windows服务的名称。这样,在windows的任务栏就会出现一个tomcat的服务管理器,图标如下 。
2、打开tomcat服务管理器的java页,如

在Java Options里面输入需要设置的参数,如设置permsize的内存
-XX:PermSize=64M
-XX:MaxPermSize=192m
-XX:ReservedCodeCacheSize=48m
-Duser.timezone=GMT+08
注:每一行后面都不能有空格。
同样,我们也可以在注册表中进行修改,HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\TestService\Parameters\Java

分享到:
评论

相关推荐

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

    在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于 JVM 默认分配的运行空间过小,导致 J2EE 项目加载的类过多,造成内存溢出。 PermGen space 是...

    PermGen space

    ### PermGen Space详解 ...总之,正确理解和合理配置PermGen Space和Heap Space对于保障Java应用的稳定运行至关重要。在面对资源不足的问题时,应从多个角度综合考虑,采取有效的措施来优化和扩展内存使用。

    java.lang.OutOfMemoryError: PermGen space

    解决 PermGen 空间溢出的方法是增加JVM内存的分配。可以通过设置以下JVM参数来实现: - `-Xms` 参数定义了JVM初始堆内存的大小,例如 `-Xms256m` 指定了初始堆内存为256MB。 - `-Xmx` 参数定义了JVM最大堆内存的...

    解决Java_heap_space问题

    通过以上方法,我们可以有效地解决Java heap space问题,确保Java应用程序稳定高效地运行。然而,值得注意的是,内存配置并非一劳永逸,应根据应用的实际运行情况和服务器资源动态调整,以达到最佳的性能平衡。

    解决JVM中得PermGen spac问题

    解决 JVM 中的 PermGen space 问题 ...在 Tomcat 环境中,PermGen space 问题和 Java heap space 问题都是常见的问题。解决这些问题可以使用上述方法。在实际应用中,需要根据实际情况选择合适的解决方法。

    Myeclipse下java.lang.OutOfMemoryError Java heap space的解决

    通过以上方法,通常可以有效解决Myeclipse下出现的`java.lang.OutOfMemoryError: Java heap space`问题。需要注意的是,在调整JVM参数时应当根据实际情况合理设置,以免造成资源浪费或者性能下降。同时也要持续关注...

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

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

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

    4. **调整PermGen空间**:在Java 8之前, PermGen 区域用于存储类的元数据,如果这个区域耗尽,会出现`java.lang.OutOfMemoryError: PermGen space`错误。在Java 8中,这部分被MetaSpace取代,可通过`-XX:...

    Tomcat给我的java.lang.OutOfMemoryError: PermGen

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

    java.lang.OutOfMemoryError解决办法

    根据提供的信息,这个错误主要涉及到两个方面:`PermGen space`和`Java heap`,并且与Tomcat服务器相关。 首先,让我们详细讨论`PermGen space`。 PermGen(Permanent Generation)是Java虚拟机(JVM)的一个内存...

    Java内存溢出的详细解决方案

    Java内存溢出主要有两种类型:PermGen space和Java heap space。 PermGen space PermGen space是Java虚拟机中的永久保存区域,主要用于存放Class和Meta信息。Class在被Loader时就会被放到PermGen space中,它和...

    java.lang.OutOfMemoryError处理错误

    解决PermGen space错误的方法有多种,常见的有以下几种: 1. 增加PermGen space的大小。 2. 减少Class的数量。 3. 使用-XX:+CMSClassUnloadingEnabled选项来启用Class卸载机制。 java.lang.OutOfMemoryError是Java...

    TOMCAT内存大小调整

    "TOMCAT内存大小调整" TOMCAT内存大小调整是指在使用Java程序从数据库中查询大量数据或应用服务器(如Tomcat、...通过调整PermGen Space和Heap Space的大小,可以解决OutOfMemoryError异常,提高应用服务器的性能。

    java内存溢出原因

    本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space溢出以及Native Heap溢出,并提供相应的解决方案。 1. **JVM PermGen space溢出** - ** PermGen space** 是JVM内存模型中的...

    JAVA-OPTS参数设置.docx

    解决 PermGen space 错误的方法: 1. 手动设置 MaxPermSize 大小。 2. 将相同的第三方 jar 文件移置到 tomcat/shared/lib 目录下。 在 Tomcat 环境中,可能会出现 OutOfMemoryError:PermGen space 错误。解决...

    tomcat 出现 OutOfMemoryError 的解决方法

    针对 Tomcat 出现 `java.lang.OutOfMemoryError: PermGen space` 和 `java.lang.OutOfMemoryError: Java heap space` 的问题,通过调整 JVM 的内存配置以及优化应用本身,可以有效避免内存溢出的发生。同时,对于...

    ssh Tomcat自动部署无需手动重启服务器设置

    本文主要介绍了使用ssh实现Tomcat自动部署的方法,以及解决OutOfMemoryError PermGen space系统错误的方法。 一、配置Tomcat server.xml文件 在Tomcat的conf文件夹下找到server.xml文件,并添加以下代码:虚拟目录...

Global site tag (gtag.js) - Google Analytics