OutOfMemoryError: PermGen Space — Jasper Rapport avec le Printemps en cours d'exécution sur Tomcat

Notre application web rencontre une situation compliquée

C'est un Printemps application développée par STS/Tomcat 7. Après l'application a été intégrée avec Jasper report 4.6.0, il est toujours jeter " OutOfMemoryError: PermGen Space. Alors la seule façon de le faire fonctionner est de redémarrer l'application. Mais après un moment il se produire à nouveau.
Voici journal avant de l'exception:

Oct 17, 2012 3:42:27 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Oct 17, 2012 3:42:30 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception

Ici est une section de l'exception, où j'ai trouvé quelque chose à propos de Jasper:

at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:442)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
at org.apache.jasper.servlet.JspServletWrapper.loadTagFile(JspServletWrapper.java:240)
at org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:578)
at org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:49)
at org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:655)

Voici quelques résultats lorsque la situation se produit:

  1. Le problème peut se produire sur la page sans Jasper composants de Rapport. Il semble que le Jaspe Rapport bean est d'essayer de trouver un tag lib tout le temps quand a request is processed by the back end and responded to the front end. Normalement à partir du fichier journal, je peux voir exception ci-dessus ne seront pas jeter jusqu'à ce que toutes les opérations de back-end(JPA de gestion) sont complètes

  2. Lors de l'exécution à log4J sur le mode debug, je vois des tonnes d'informations montrant quelque chose comme l'analyse/le rendu de tous les composants de Jasper modèle(textfields, stylo, boîte...), il y a une petite coupure à partir du grand journal:

    2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester.sax -- startElement(http://jasperreports.sourceforge.net/jasperreports,textElement,textElement)
    2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester --   Pushing body text ''
    2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester --   New match='jasperReport/summary/band/textField/textElement'
    2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester --   Fire begin() for FactoryCreateRule[className=net.sf.jasperreports.engine.xml.JRTextElementFactory, attributeName=null, creationFactory=net.sf.jasperreports.engine.xml.JRTextElementFactory@12dc6007]
    2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- [FactoryCreateRule]{jasperReport/summary/band/textField/textElement} New net.sf.jasperreports.engine.design.JRDesignTextField
    2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester.sax -- ignorableWhitespace()

    Encore, ce journal est généré lorsqu'une requête à la page qui ne contient pas tout Jasper composant.

J'ai fait quelques recherches mais ne trouve toujours pas la solution à ce problème.

  1. La première question est la même il y a une jasperreport bean dans l'application pour laquelle il est toujours en cours d'exécution lorsque ce n'est même pas autocâblés avec le service actuel(le sens de la page en cours n'ont pas de jasper composant). Est-il une solution/réponse à cette situation?

  2. Également à partir du message de l'exception
    Au moins un POT a été analysé pour les Tld encore contenait pas de Tld.
    au org.apache.jasper.compilateur.JDTCompiler.generateClass(JDTCompiler.java:442)

    devraient vient de Tomcat, et Tomcat never contains any JSTL jar, alors je suppose qu'il ne peut pas trouver une correspondance TLD pour analyser jasper rapport donc à faire un scan complet de tous les pots. Si oui, alors comment se fait-il existe une grande quantité de journaux de débogage de org.apache.commons.digester.Digester semble effectivement occupé sur l'analyse du modèle jasper?

En général, font de ce thread est juste essayer de trouver une solution au problème, et aussi de trouver une réponse à pourquoi Jasper est actif sur un lieu n'en a pas besoin, et comment nous pouvons laisser tomcat correctement analysé les modèles?

M'excuse si trop verbeux, et merci pour tout les conseils.

Alors, avez-vous essayé d'augmenter la taille de la PermGen? Ce n'est pas comme il ya beaucoup d'autres façons.
Pavageau oui j'ai essayé, de le mettre à 512M, mais toujours obtenir la même question...est-il dans le catalina.sh et JAVA_OPTS="...-XX:MaxPermSize=512m..." ?
il semble jasper reports ont ce genre de problèmes avec certaines configurations, afin de dépanner la cause de jasper reports pourrait très bien être faisable.
merci de m'éclairer sur la façon de tracer la cause de racine de Jasper Rapport ou je devrais essayer HeapDumpOnOutOfMemoryError ? Merci.
essayez de faire cela, obtenir un tas de vidage de la condition d'erreur et d'analyse qui devrait être un pas en avant

OriginalL'auteur Dreamer | 2012-10-17