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

Servlets/JSP Java Discussion :

Outofmemory Permgen space sur une appli avec beaucoup de JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut Outofmemory Permgen space sur une appli avec beaucoup de JSP
    Bonjour,

    Je viens de récupérer une application sur laquelle des erreurs Outofmemory Permgen space arrivent très régulièrement et nécessitent un redémarrage du serveur d'appli.
    Le Permgen space est fixé à 512 Mo sur une JVM Sun.

    Par contre, l'application est essentiellement composée de JSP générée par un outil. Il y a environ 10 000 JSP !

    D'après ce que j'ai compris en lisant des articles, la Permgen contient toutes les informations concernant les classes (et donc ces 10 000 JSP en version compilée) et cette zone n'est a priori pas garbage collectée.

    J'aimerais avoir votre retour d'expérience sur le sujet :
    Est-ce "normal" que mon appli plante, car mes 10 000 JSP vont nécessiter une Permgen space énorme une fois chargée (512 Mo / 10 000 JSP = 50 ko par JSP) ou est-ce qu'une fuite mémoire ne se cache pas quelque part dans cette appli ?
    Je n'ai pas encore essayé mais est-ce qu'une option du type -XX:+CMSClassUnloadingEnabled est une solution viable ou simplement un mauvais contournement du problème ?

    Par avance, merci.

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Petit up svp ! Si quelqu'un a déjà rencontré le problème d'avoir une appli web avec plus de 10 000 classes, ce qui implique une PermGen Space énorme...
    Merci !

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le problème des JSP c'est que, a priori, elle contiennent beaucoup de texte (le "contenu" statique de la page). Ce texte fait partie de la classe compilée au final. Le permgen est bien garbage collecté par défaut. Seulement, comme il s'agit de classes, ca ne peux se faire que quand le classloader est libéré, ce qui n'arrive que lors de mises à jour de l'application. Pour avoir une petite idée de la taille mémoire que prend un JSP compilée, la taille de son .class est un bon indicateur. Des valeurs supérieures à 50k / classe est fréquent. J'aurais tendance a dire que celui qui a réalisé une application avec 10.000 JSP n'était pas très au fait de comment fonctionne les JSP :s

    Noter qu'un permgen de 512M c'est déjà énorme, tu peux essayer de le monter à 728 mais on atteind un peu les limites de l'acceptable là.

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Merci tchize_ pour ton retour.
    Pour être plus précis, l'application est basée sur un CMS découplé qui génère 1 JSP pour chaque page du site. Comme il s'agit d'un site énorme avec beaucoup de publications, j'ai beaucoup de JSP.
    Je m'interroge aussi sur la pertinence d'une telle architecture où on génère de la JSP pour au final servir du contenu statique...
    Question complémentaire : où sont stockées toutes ces String créées par les JSP ?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    en mémoire. En fait, par exemple, quand tu as ceci dans une JSP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html> <head> blablabla
    tu va avoir en très gros dans le code java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Writer writer = response.getWriter();
    //....
    writer.write("<html> <head> blablabla");
    ce qui aboutit inévitablement à ces string d'être dans le .class final et donc définitivement et de manière permanente dans la mémoire du classloader.

    Conclusion: générer un jsp statique par document à servir = garder toutes les pages à servir en mémoire vive!

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Merci pour ces éléments. Nous étudions la possibilité de générer du code HTML au lieu de JSP pour résoudre ces problèmes de mémoire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. performance sur une listview avec beaucoup de lignes
    Par jerem_orga dans le forum jQuery
    Réponses: 4
    Dernier message: 01/02/2012, 10h24
  2. Réponses: 15
    Dernier message: 16/06/2009, 22h05
  3. Couplage avec Apache: mapper root context sur une appli?
    Par jfourment dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/07/2007, 08h28
  4. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00
  5. Déployer une appli avec SQL SERVER
    Par tiboleo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/10/2003, 14h29

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