2013-05-25 2 views
0

Я имеющий OutOfMemory проблему приложения, развернутого в WebSphere 7.Каждое увеличение Deploy количество загруженных классов

Я использую YourKit, чтобы попытаться решить это то, что происходит, и одна интересная вещь, которую я мог бы увидел, что при первом запуске приложения он загружает около 20 тыс. классов и каждый раз, когда я делаю другое развертывание (без перезапуска websphere), это число увеличивается на 2 тыс., а размер кучи следует за этим увеличением.

Я предполагаю, что это основная проблема, но я понятия не имею, как объяснить, почему это происходит.

Я попытался перечислить все классы перед развертыванием и сразу после другого, но это не очень хорошо работало, так как я не мог перечислить все 20k-классы (только 10k не знает почему). И когда я сравнил два списка, я нашел около 600 новых классов, которые действительно были из моего приложения или из зависимостей моего приложения.

Я обнаружил, что большинство классов моих приложений - это перечисления и реализации классов DAO.

Мое приложение - приложение Java EE 6 с использованием фреймов Struts и Spring.

Любые мысли?

+0

утечки ClassLoader весело! http://frankkieviet.blogspot.com/2006/10/classloader-leaks-dreaded-permgen-space.html – DannyMo

+0

@damo websphere 7 - это весело как ад :) – WeMakeSoftware

+0

Обратите внимание, что в описании проблемы есть несогласованность, потому что вы говоря о приложении Java EE 6, но WebSphere 7 является сервером приложений Java EE 5. –

ответ

1

OutOfMemoryError может быть вызвано, когда заполнено пустое пространство или пространство перменства JVM.

Если проблема, с которой вы столкнулись, вызвана перераспределением приложения, скорее всего, вы попадаете в OGG PermGen. Это происходит, когда сервер приложений не может полностью выгрузить определения классов из своей памяти (утечка памяти).

Эта ситуация распространена (по крайней мере, по моему опыту), и обычно разработчики просто увеличивают размер сервера PermGen сервера приложений или просто отказывают сервер приложений для очистки PermGen.

+0

PermGen - это концепция, применимая к JVM Sun/Oracle. В IBM JVM ситуация немного отличается. Объекты класса - это просто объекты в куче и не принадлежат к отдельному поколению. Код загружается в отдельную область памяти, размер которой не ограничен. –

0

Это типичная утечка загрузчика класса. Это может быть вызвано вашим приложением или ошибкой во время выполнения (т. Е. WebSphere или JRE). Обратите внимание, что их много в WAS 7, особенно в старых пакетах исправлений.

Вы можете проконсультироваться следующий документ, чтобы получить больше некоторое представление о проблеме:

https://code.google.com/p/arit/wiki/GettingStarted

Смежные вопросы