2009年2月3日星期二

暂时解决Perm Space异常

概述

本文主要描述在ADF开发中如何暂时解决Perm Space异常。

场景:

J2EE应用开发过程中,相信很多开发人员都遇到过Perm SpaceOut of Memory异常,在使用Jdeveloper 11gWeblogic进行ADF开发时,也遇到了该问题,该问题的原因是由于SUN JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但其没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,却无法回收。

解决方法:

1、不使用SUNJDK,而改用JRokit

2、适当加大Perm Space

3、其他

这里,我们通过配置文件的修改,适度增大Perm Space,以避免该异常的发生。

实现

1、找到Weblogic启动脚本。如果不知道该脚本的存放路径,可以在Jdeveloper 11g中运行某一应用,在控制台的第一行中会打印出该路径。

E:\Hand\Oracle\Middleware\jdeveloper\jdev\system11.1.1.0.31.51.88\

DefaultDomain\bin\startWebLogic.cmd

[waiting for the server to complete its initialization...]

.

.

JAVA Memory arguments: -Xms512m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=96m -XX:MaxPermSize=256m.

WLS Start Mode=Development

2、根据步骤1中的路径找到startWeblogic.cmd文件,使用文本编辑器打开,而在startWeblogic.cmd中是通过调用setDomainEnv.cmd来设置的这些参数,因此,需要继续设置setDomainEnv.cmd

3、修改该文件中的如下内容:

set MEM_ARGS=-Xms512m -Xmx512m

set MEM_PERM_SIZE=-XX:PermSize=96m

set MEM_MAX_PERM_SIZE=-XX:MaxPermSize=256m

4、保存该文件,重新启动服务器

0 评论:

发表评论