Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 12h06   #1
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Par défaut Problème de fuite mémoire BIRT 3.7.1

Bonjour,

Je teste une application web que j'ai conçu et qui utilise le ReportEngine API de BIRT. L'application génére à intervalle régulier des rapports birt. Elle est déployé sur un serveur Tomcat 5.5.
Mon soucis vient du fait que lors de l'exécution de l'application, la mémoire utilisé par le service Tomcat augmente lentement mais continuellement. et au bout d'un certain temps, les rapport ne sont plus exécuté du fait du manque de mémoire. J'ai fais des dump de la mémoire grâce à l'outils VisualVM. Mais je ne parviens pas à situer la fuite. Mais j'ai l'impression que certains objets utilisés lors de l'exécution des rapport ne sont pas libéré ou encore que le classloader n'est pas supprimer ainsi que les objets référencé par lui.

Si vous avez une petite idée ou alors que vous avez déjà fait face à ce genre de problème, merçi de me donner un coup de main.

Merçi pour votre aide.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h08   #2
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
J'ai quelques questions: quels sont les paramètres heap et permgen de la jvm de tomcat? Au bout d'environ combien d'exécutions de rapports l'appli tombe, et comment sont ils lancés?

Par hasard utiliserais tu un IReportEngine en variable de classe ("static")? Et enfin est ce que les rapports birt générés utilisent des messages localisés (internationalisés) ?
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h43   #3
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Merçi donino de repondre,
les paramètres de la JVM sont: la taille max de la pile(Xmx) =256m et permGen est de 64m, bref j'ai laissé les paramètres standards.

Je lance dans mon application 10 sessions qui correspondent à des onglets différents de mon navigateur. les rapports concernés sont regénérés chaque minute. en fait, je voulais faire des tests de charges sur mon application.

le IReportEngine que j'utilise est déclaré en private static. les messages du rapport sont localisés.
J'espère que mes réponses t'auront donné des idées

Merçi.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h49   #4
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Pour plus de précision, j'utilise un VisualVM pour visualiser la progression de ma pil et de la PermGen, et je constate que la pile ne débordes pas mais augmente aussi, tandis que la quantité de mémoire utilisé par le service Tomcat est en constante augmentation jusqu'à ce que le service Tomcat s'arrête.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 16h52   #5
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
A moins que tu n'ai des raisons spécifiques de mettre des paramètres très bas, il faut quand même avoir la main un peu plus lourde sur la mémoire, surtout sur la permgen, d'autant plus que le moteur est en static il doit se sentir bien à l'étroit:
partir au minimum sur -Xmx512m -XX:MaxPermSize=256m

D'ailleurs, même si je sais bien que la servlet de référence utilise également un moteur birt statique, si tu as une seule servlet qui utilise le moteur tu as tout à gagner à le passer en variable non static, car une variable de classe aussi complexe gène considérablement le garbage et te posera bien des soucis, comme de la mémoire libérée au lance-pierre et des problèmes lors des redéploiements.

Je posais la question sur la localisation car il y a un problème plus ou moins connu sur ce point, dont un des effets est par exemple le bug 339191, et malheureusement classé à tort comme bug tomcat et non eclipse. Il me gène énormément sur mon appli et je tenterai de mieux le cerner quand j'aurai un peu plus de temps.

Enfin, même si je pense que tu l'as déjà fait vérifie bien que ce ne sont tout simplement pas les sessions web qui s'accumulent, si certains attributs ne sont pas supprimés au fur et à mesure.
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h34   #6
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
J'ai augmenté les paramètres de la JVM -Xmx et -XX:MaxPermSize sans plus de succès.

Vu qu'il s'agit d'une application web qui appelle des services et vu le coût de la création du moteur BIRT, je suis quelque peu obligé de créer et utiliser une seul instance de ReportEngine. Cependant est ce que tu pourrais approfondir ton explication sur la difficulté du garbage collector face à la gestion du ReportEngine.

Pour ce qui est du bug que tu as mis en lien, je ne trouve aucun des messages d'erreur signalée dans mes logs, ni ceux de Tomcat.

Merçi
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h17   #7
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
Citation:
Envoyé par kadje84 Voir le message
Vu qu'il s'agit d'une application web qui appelle des services et vu le coût de la création du moteur BIRT, je suis quelque peu obligé de créer et utiliser une seul instance de ReportEngine.
Non tu m'as mal compris, je ne dis pas de le réinstancier à chaque rapport Il faut le créer une fois pour toutes dans la servlet ou le portlet concerné, en tant que variable d'instance non statique, et sa "durée de vie" est du coup liée à celle de la servlet/portlet, niveau perf ça ne change strictement rien. Encore une fois si plusieurs servlet utilisent le moteur, comme c'est le cas du Web viewer avec les frameset, run, preview et output ça se justifie, mais dans le cas contraire à mon avis il faut à tout prix éviter. De mon coté j'étais parti sur un moteur statique en suivant un exemple de Jason W., et devant les nombreux problèmes rencontrés sur les objets qui restaient inexplicablement éternellement en heap j'ai fait marche arrière et cela a tout résolu, sauf le souci sur la localisation cité plus haut. Maintenant je ne sais pas du tout si ton problème est lié à ça ou pas, mais ça vaut le coup d'essayer si tu ne trouves rien d'autre.
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h28   #8
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
Merçi donino, je le teste demain au boulot et je te fais signe.
Merçi, beaucoup de tes eplications
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 08h35   #9
Membre à l'essai
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 22
Points : 22
J'ai résolu mon problème,

En fait mon application faisait que deux IrenderTask pouvait utiliser le même fichier rptdocument pour générer des rapports sous le format HTML dans un même répertoire et tout cela simultanément. Ainsi donc, une exception était levée et malgré le fait que je fasse des "close" sur les IRenderTask et les rptdocuments, la mémoire n'était pas vidée. Si quelqu'un pouvait d'ailleurs me l'expliquer, j'ai hâte de l'écouter.

Merçi à tous de votre aide.
kadje84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h15.


 
 
 
 
Partenaires

Hébergement Web