Проблема загрузки классов в приложении Java Enterprise - PullRequest
3 голосов
/ 11 марта 2009

У меня есть корпоративное приложение с EJB3 и JSF на сервере Glassfish. После запуска этого приложения в течение более 2 недель я понял, что у меня проблемы с загрузкой классов. Я не думаю, что это проблема с permgen. Классы загружаются каждый раз, когда я открываю страницу, но потом они никогда не стираются из памяти. Вот снимок памяти моего сервера:

Snapshot

Итак, мне просто нужно несколько советов, как я могу отладить эту проблему.

Ответы [ 3 ]

2 голосов
/ 11 марта 2009

* * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * .

Использование jhat может помочь выяснить, какие классы занимают память, а затем искать статическую ссылку, которая может их содержать / или загрузчик классов, предотвращая правильную выгрузку.

0 голосов
/ 11 марта 2009

Это может быть проблема с вашей веб-инфраструктурой JSF (MyFaces, ICEFaces и т. Д.), Если вы ее используете. Особенно учитывая тот факт, что вы не передислоцируете приложение, но это происходит, когда страницы открываются / закрываются. Я предлагаю вам проверить соответствующий трекер, прежде чем делать больше отладки и профилирования.

Кроме того, вы можете попытаться развернуть приложение на локальном компьютере с намеренно малым пространством кучи и попытаться воспроизвести утечку памяти последовательно, только перемещаясь по веб-страницам приложения. Надеюсь, вы сможете точно понять, какое действие приводит к загрузке новых классов.

0 голосов
/ 11 марта 2009

Не похоже, что вы перезагружаете свое приложение, что было бы очевидным ответом. На самом деле вы хотите узнать, что это за классы.

Reflection и XSLT [C] - очевидные цели для создания классов, но это кажется невероятно регулярным. Предположительно, где-то есть кэш, основанный на времени, который каким-то образом просачивается.

...