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


解决

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

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

了,导致我走了弯路。

相关内容

    暂无相关文章