IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JOnAS Java Discussion :

[Exception] OutOfMemoryError: PermGen space


Sujet :

JOnAS Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Points : 90
    Points
    90
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    (@_@)

  2. #2
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 65
    Points
    65
    Par défaut
    Je ne vais surement pas faire avancer la chose, mais sache que j'ai le même problème avec Tomcat et que moi aussi la seul chose que j'ai trouvé à faire est de redémarer le serveur.
    Donc si tu trouves une solution je suis preneur
    Si tu ne peut pas battre ton ordinateur aux echecs, essaye le kick boxing

  3. #3
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 65
    Points
    65
    Par défaut
    sinon a tu essayé ceci :

    Augmenter la mémoire allouée à Java ?
    Si tu ne peut pas battre ton ordinateur aux echecs, essaye le kick boxing

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Points : 90
    Points
    90
    Par défaut
    Mon problème n'est pas lié à la compilation, c'est lorsque j'accede a mon appli (déployée sous Jonas) depuis un navigateur.
    (@_@)

  5. #5
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    J'ai le même problème sous Tomcat , apparamment lié à Hibernate.

    Hibernate et d'autre utilise la librairie CGLIB (plus très sur du nom).
    Le problème c'est que lors d'un reload d'appli CGLIB ne rend pas toute la mémoire en permgen (utiliser pour le classloader ) apparemment 4Mo reste perdu à chaque reload.

    Et pour l'instant y'a pas de solution à moins de ne pas utiliser un composant basé sur CGLIB...

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Points : 102
    Points
    102
    Par défaut
    moi aussi parfaois j obtiens cette erreur

    Mais moi , j utilise Jboss, et dans le repértoire serveur je fais un peu le ménage en supprimant les differents ear déployés

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    G le meme pb sur JBoss ...
    Je redemarre le server comme tt le monde apparement ... :-)

  8. #8
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Comme je l'ai déjà dit c'est lié à une API utilisé et non pas au seuveur d'appli utilisé c'est pareil pour tout le monde.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Points : 90
    Points
    90
    Par défaut
    Qu'est ce qu'on peut donc faire ?
    Ne plus utiliser la fameuse librairie "CGLIB" ?
    (@_@)

  10. #10
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Points : 90
    Points
    90
    Par défaut
    Je vois que je ne suis pas le seul à avoir le probème.
    Mais il semble que personne ne sache y répondre.

    Aucune idée ?
    (@_@)

  11. #11
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Points : 90
    Points
    90
    Par défaut
    J'ai toujours le même problème, ça serait sympa de nous indiquer quels pourraient être les causes du problème.
    (@_@)

  12. #12
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Citation Envoyé par n@n¤u
    J'ai toujours le même problème, ça serait sympa de nous indiquer quels pourraient être les causes du problème.
    La cause à déjà était cité mais personne n'a de réelle solution.
    Actuellement quoi faire, éviter les redéploiment au maximum, favoriser les redémarrage tomcat.
    Augmenter la taille du permgen Space pour augmenter le nombre de redeploy possible.
    Cloisonner dans une webapps dédié les fonctionnalité lié à une lib qui pause pb( pas simple du tout)...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    s'il y a vraiment une fuite mémoire il n'y a rien à faire, à part retarder l'apparition du OutOfMemory en rajoutant ceci dans la ligne de commande de démarrage de votre serveur:
    ou 256m pour être encore plus tranquille (si le -Xmx est à 512m c'est très bien)

    edit: ha oui et surtout ne pas mettre -noclassgc ca empeche le garbage collector de nettoyer le perm gen, d'où le OutOfMemory au bout d'un certain temps

  14. #14
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Points : 90
    Points
    90
    Par défaut
    Je me pose une question bête :
    est-ce que la fuite mémoire pourrait être provoquée par un mauvais code ?
    Dans mon traitement Java ?
    Si oui, comment pourrais-je faire pour le cibler et comment y rémédier.
    Où est-ce que, au contraire, les fuites mémoire ne peuvent pas venir de mon code.
    (j'utilise souvent System.gc(), mais apparament, ça ne sert pas à grand chose...)
    (@_@)

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Points : 60
    Points
    60
    Par défaut
    Voir ici pour plus de détails sur les causes et palliatifs.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 55
    Points : 60
    Points
    60
    Par défaut 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...

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut 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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/10/2009, 13h48
  2. java.lang.OutOfMemoryError: PermGen space
    Par john_wili dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 11/04/2009, 19h23
  3. Horrible Exception: java.lang.OutOfMemoryError: PermGen space
    Par liquideshark dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 06/01/2009, 10h54
  4. java.lang.OutOfMemoryError: PermGen space
    Par LGnord dans le forum Langage
    Réponses: 15
    Dernier message: 13/11/2007, 18h21
  5. Réponses: 9
    Dernier message: 28/08/2007, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo