OutOfMemoryError PermGen space 的解决办法(头痛了几天)

解决

OutOfMemoryError: PermGen space

,过程是痛苦的,结果是舒畅的

最近自己的程序在

Redeploy

重新部署的时候,老提示

OutOfMemoryError: PermGen

space

错误,在网络上搜索了相关的资料,但是按照做后还是存在这个问题。由

于我是第一次碰到这个问题,

花费了我

2

天时间,

过程比较痛苦,

结果还是比较

圆满的。我将我的经历写下来,供我自己以后参考,也提供给大家分享。

在网络上关于

OutOfMemoryError:

PermGen

space

的解决办法很多了,但是有

的办法都是互相转发,真假难辨。有的可能还产生误导。

我的环境是

Myeclips

8.5

tomcat6.x

试过了很多办法后,

比如:

文档

Linux

Windows

修改

Java

虚拟机内存大小》

http://duanfei.iteye.com/blog/1189541

中的办法,

我都试过了,

还是不

行;

当然还参考了很多其他资料,

然后进一步研究

JVM

的优化等,

我就是想知道

我配置的内存参数应该够大了,

为什么还是溢出,

难道没有生效,

那我就需要找

到配置后系统认可的内存参数是多少,

参考网络上的知识,

启动了

JDK

自带的工

具,

\jdk1.6.0_10\bin

下面的

jconsole.exe

内存监控的工具,

点击进入如下:

选择

PID

4472

的这个进程,

点击

,进入如下界面,

选择内存页,并且选择图表中最后一个选项的“内存池“

Perm Gen

,下面的详细信息显示

的是:

这个地方的最大值是

65536Kb

,也就是

64M,

我于是就找到原因了,

64M

肯定会导致溢出,

但是我配置了几百兆的内存空间就是不生效呢。

注意,

这个是我在

myclipse

中启动的

tomcat

看到的结果。

接下来,我进入

bin/catalina.bat

文件中的“

rem ----- Execute The Requested Command -

”这

个后面增加了下面的语句

set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m

-XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m

,这个地方注意增加的位

置是在

rem ----- Execute The Requested Command

后面,最好

set JAVA_OPTS=%JAVA_OPTS%

这个也要加上,

这个网络上好多文档没有将这个位置交代清楚,

或者说的不是这个地方,

不是其他地方也可以,我没有试。我手工启动

tomcat

,在

cmd

状态下输入:

startup

,然后

jconsole.exe

,明细

Perm Gen

的内存就是我配置的内存

521M

,是生效了的

.

但是我在

myclipse

中启动

tomcat

后,重新部署程序,错误依旧。原来文档

Linux

Windows

修改

Java

虚拟机内存大小》

http://duanfei.iteye.com/blog/1189541

)中提到

如果是通过

Myeclipse

启动

Tomcat

修改

Myeclipse

配置选项

打开选项

..

输入

tomcat

关键字

,

然后点开

Server

下面的

JDK

就会出现配

置区域

Optional Java VM arguments.

直接加入

-Xms128m -Xmx512m

这个地方是有一个漏洞的,

直接加入

-Xms128m -Xmx512m

应该是

-Xms256m -Xmx512m

-XX:PermSize=256m -XX:MaxPermSize=512m

,这个是对

myclipse

生效的。如果没有

-XX:PermSize=256m -XX:MaxPermSize=512m

,那么

PermGen

的内存始终是

64M

。修改后,重

tomcat

,重新部署,内存不再溢出了。

我的机器上是:

Servers/Tomcat/Tomcat 6.x/JDK

中的

Optional Java VM arguments

。找到了原因,解决也就自然很简单了。

注意这个地方

Servers/Tomcat/Tomcat 6.x

这个地方还有一个参数:

Optional program

arguments

,这个感觉作用不大,我也是修改后没有什么效果,我以为修改这个地方就可以

了,导致我走了弯路。

时间: 2024-08-01 15:45:58

OutOfMemoryError PermGen space 的解决办法(头痛了几天)的相关文章

MyEclipse6.5通过Jetty跑Web应用时提示OutOfMemoryError: PermGen space的解决办法

/** * MyEclipse6.5通过Jetty跑Web应用时提示OutOfMemoryError: PermGen space的解决办法 * @see --------------------------------------------------------------------------------------------------- * @see Jetty启动类-->Run AS-->Open Run Dialog-->Arguments-->VM argum

MyEclipse10中启动出现OutOfMemoryError: PermGen space如何解决

一篇关于技术的文档,分享给大家.在MyEclipse中启动程序运行,报错java.lang.OutOfMemoryError: PermGen space应该怎么办?这是eclipse 内存不够的原因. PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC

OutOfMemoryError: PermGen space的解决方法

MyEclipse中启动Tomcat,报OutOfMemoryError: PermGen space的解决方法 发表于 2012 年 7 月 27 日 这是个很简单的问题,但是搜索了半天,发现大家写博客的时候太不认真,很多人很不严谨,会误导大家.这里自己再总结一下: 1. 如果是单独启动Tomcat报错,可以这样修改catalina.bat文件(假设在Windows中): 在"rem -– Execute The Requested Command -------------"这一行

myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法

摘要: tomcat部署多个项目后,启动tomcat正常,访问项目时却会出现该错误在网上查了查又试了好几次,才解决,将解决方法记录下来,以方便以后查看或让遇到同样问题的朋友有个参考 PermGen space是啥就不说了,网上找找大堆,感觉也没必要记这些个概念 问题的根源就是JVM的内存不够用了!!!解决方法: *********************************************************************************************

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

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存.说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理

多个项目MyEclipse中启动出现OutOfMemoryError: PermGen space如何解决

在MyEclipse中启动程序运行,报错java.lang.OutOfMemoryError: PermGen space应该怎么办?这是eclipse 内存不够的原因. PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collect

java.lang.OutOfMemoryError: PermGen space从解决方法中认识堆与非堆

1)堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”. 可以看出JVM主要管理两种类型的内存:堆和非堆.简单来说堆就是Java代码可及的内存,是留给开发人员使用的:非堆就是JVM留给自己用的, 所以方法区.JVM内部处理或优化所需的内存(如JIT编译后的代码缓存).每个类结构(如运行时常

Web项目java.lang.OutOfMemoryError: PermGen space异常解决

接手一个新的Web项目,编译运行(Tomcat版本为7),运行的时候报出了java.lang.OutOfMemoryError: PermGen space的异常,搜了一下这样解释: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域. 为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 G

Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法

首先需要双击tomcat server,如下图所示: 双击上图后会出现,tomcat配置的界面: 然后再点击上图的,红色矩形框的链接,会弹出tomcat参数配置的节面,要选择Arguments参数框: 如上图在VM arguments文本框内设置 -XX:MaxPermSize=256m的值即可, 当然此处还可以添加其他jvm参数,比如最大内存,最小内存等.