[Exception] OutOfMemoryError: PermGen space
Bonjour,
je travaille actuellement sur une appli J2EE avec un serveur JOnAS.
A force de déployer (et redéployer...), lorsque je veux consulter mon appli via un navigateur, j'ai l'erreur suivante :
Code:
java.lang.OutOfMemoryError: PermGen space
Le seul remède que j'ai trouvé c'est celui de redémarrer JOnAS.
Voici mon build.xml (si ça peut aider):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| <project name="Test_Sout_RCE" default="compile" basedir=".">
<description>
Test_Sout_RCE local build file
</description>
<property environment="env" />
<property name="filename" value="Test_Sout_RCE" />
<property name="src" location="src" />
<property name="build" location="WEB-INF/classes" />
<property name="lib" location="WEB-INF/lib" />
<property name="server" location="${env.CATALINA_HOME}" />
<property name="servlet.jar" location="${server}/common/lib/servlet-api.jar" />
<property name="deploy" location="${server}/webapps/${filename}.war" />
<target name="init">
<tstamp />
<delete dir="${build}" />
<mkdir dir="${build}" />
</target>
<path id="project.class.path">
<pathelement path="${env.classpath}" />
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
<pathelement location="${src}" />
<pathelement location="${build}" />
<pathelement location="${servlet.jar}" />
</path>
<target name="compile" depends="init" description="compile the source ">
<echo message="compiling files" />
<javac srcdir="${src}" destdir="${build}" classpathref="project.class.path" />
<echo message="copying other src xml and property files to classes" />
<copy toDir="${build}">
<fileset dir="${src}">
<include name="**/*.properties" />
<include name="**/*.xml" />
</fileset>
</copy>
</target>
<target name="war" depends="compile" description="Builds and deploys application war file">
<echo message="Undeploying Old WarFile..." />
<exec dir="." executable="cmd.exe">
<arg line="/c jonas admin -r ${deploy}" />
</exec>
<echo message="Old WarFile Undeployed !" />
<delete dir="${server}/webapps/${filename}.war" />
<war webxml="WEB-INF/web.xml" destfile="${deploy}" update="true">
<fileset dir=".">
<include name="**/**.gif" />
<include name="**/**.png" />
<include name="**/**.jsp" />
<include name="**/**.css" />
<include name="**/**.js" />
<include name="**/**.html" />
<include name="**/**.htm" />
</fileset>
<webinf dir="WEB-INF" includes="**" />
</war>
<echo message="Deploying New WarFile..." />
<exec dir="." executable="cmd.exe">
<arg line="/c jonas admin -a ${deploy}" />
</exec>
<echo message="New WarFile Deployed !" />
</target>
</project> |
Que puis-je faire ?
Merci de votre implication ;)
Avec la JVM de IBM ou de BEA, plus de problèmes!!!!
Salut,
J'ai finis par trouver une solution ... Je comprend mieux pourquoi les seuls utilisateurs de Weblogic ou Websphere n'ont jamais ce problème....
De plus les JVM d'IBM ou de BEA (Jrockit) ne sont pas moins libres d'utilisation que celle de SUN...
Libération de la mémoire permanente
Sur certaines JVM (ie. Sun), il est aussi important je crois, d'ajouter l'option suivante :
-XX:+CMSClassUnloadingEnabled
Cette dernière autorise la JVM à décharger d'anciennes définitions de classes inutilisées..
Pour plus de détails, voir les infos que j'avais rassemblé sur cette erreur : Tomcat et la fameuse outofmemoryerror