Domanda

Ho un'applicazione Enterprise con EJB3 e JSF sul server Glassfish. Dopo aver eseguito questa applicazione per più di 2 settimane mi sono reso conto di avere problemi con il caricamento di classe. Non penso che questo sia un problema con Permgen. Le classi vengono caricate ogni volta quando apro una pagina ma non vengono mai cancellate dalla memoria. Ecco l'istantanea della memoria del mio server:

Snapshot

Quindi, ho solo bisogno di alcuni suggerimenti su come posso eseguire il debug di questo problema.

È stato utile?

Soluzione

C'è una una bella spiegazione del perché questo genere di cose accade, e altro recente resoconto di un problema simile qui .

L'uso di jhat potrebbe aiutare a scoprire quali classi occupano la memoria, quindi cercare un riferimento statico che possa trattenerle / o il programma di caricamento classi, impedendo lo scarico corretto.

Altri suggerimenti

Non sembra che tu stia ricaricando la tua applicazione, che sarebbe la risposta ovvia. Davvero vuoi scoprire quali sono queste classi.

Reflection e XSLT [C] sono obiettivi ovvi per la creazione di classi, ma questo sembra incredibilmente regolare. Presumibilmente c'è qualche cache basata sul tempo da qualche parte che perde in qualche modo.

Questo potrebbe essere un problema con il tuo framework Web JSF (MyFaces, ICEFaces ecc.), se ne stai usando uno. Soprattutto dato il fatto che non stai ridistribuendo l'applicazione, ma questo accade quando le pagine vengono aperte / chiuse. Ti suggerisco di controllare il tracker dei problemi appropriato, prima di fare più debugging e profiling.

Inoltre, puoi provare a distribuire l'applicazione sul tuo computer locale, con spazio heap intenzionalmente basso, e provare a riprodurre la perdita di memoria in modo coerente navigando solo attraverso le pagine Web dell'applicazione. Spero che sarai in grado di capire esattamente quale tipo di azione comporta il caricamento di nuove classi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top