|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Consultant en Business Intelligence Inscription : mai 2009 Messages : 186 ![]() |
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) ? |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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.
|
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Consultant en Business Intelligence Inscription : mai 2009 Messages : 186 ![]() |
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. |
|
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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 |
|
|
00
|
|
|
#7 | |
|
Membre confirmé
![]() Consultant en Business Intelligence Inscription : mai 2009 Messages : 186 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
Merçi donino, je le teste demain au boulot et je te fais signe.
Merçi, beaucoup de tes eplications |
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : novembre 2008 Messages : 78 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com