Fuite mémoire dans IsisFish (in process)
Bonjour, J'ai ré-étudier le problème de l'erreur mémoire dans isis lorsqu'on lance plein de simulations "dans le même processus". L'erreur est toujours présente, lorsqu'on arrive au environ de 22 simulations : java.lang.OutOfMemoryError: PermGen space Il semblait que l'erreur avant était : java.lang.OutOfMemoryError: Java heap space * *J'ai utilisé ce blog pour savoir ce qu'était réellement une erreur "PermGen space" : http://blogs.sun.com/fkieviet/entry/classloader_leaks_the_dreaded_java J'ai donc refais du profiling de code en utilisant sa méthode (avec les outils du jdk : jdump, jhat...) Donc, il préconise de chercher dans les rapports les objets qui ne sont plus sensé être présents dans la mémoire après une simulation. Il y a donc entre autre : - les scripts (gravitymodel, simatrix) - les aspects des scripts - les équations On peut aussi voir ce qui garde cette référence, et ca à l'air d'être lié aux aspects, plus précisement les classes générées par aspectwerkz (via asm) qui conservent une référence statique sur le classloader , et le classloader qui conservent tout ce qu'il a instancié : Static reference from scripts.GravityModel_1__997515023_1620252780___AW_JoinPoint.THIS_CLASS (from class scripts.GravityModel_1__997515023_1620252780___AW_JoinPoint) : --> class scripts.GravityModel (160 bytes) (??:) --> fr.ifremer.isisfish.aspect.AspectClassLoader@0x7fd2658111b0 (122 bytes) (field classes:) --> java.util.Vector@0x7fd2662ac200 (36 bytes) (field elementData:) --> [Ljava.lang.Object;@0x7fd266387378 (1296 bytes) (Element 41 of [Ljava.lang.Object;@0x7fd266387378:) --> class scripts.SiMatrix_1_2118962238__1005843209___AW_JoinPoint (160 bytes) Pour résumer, les simulations sont isolée entre elles par un classloader qui n'est pas libéré à la fin. Je ne vois pas actuellement de solution pour résoudre ce problème. -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
participants (1)
-
Eric Chatellier