Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tomcat: java.lang.OutOfMemoryError: PermGen space, Tomcat 
:(
    Опции темы
Andrey1
Дата 4.12.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Каково состояние дел с решением проблемы OutOfMemoryError для Tomcat + Hibernate?

По-прежнему эта проблема никак не решается?

Код

javax.servlet.ServletException: Servlet execution threw an exception

root cause 

java.lang.OutOfMemoryError: PermGen space
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    oracle.net.ns.NSProtocol.establishConnection(Unknown Source)
    oracle.net.ns.NSProtocol.connect(Unknown Source)
    oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:858)
    oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:268)
    oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
    oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
    java.sql.DriverManager.getConnection(DriverManager.java:582)
    java.sql.DriverManager.getConnection(DriverManager.java:154)
    org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
    org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
    org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
    org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
    org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
...



--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
MisterCleric
Дата 4.12.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Это у тебя во время горячего передеплоя?

Добавлено через 8 минут и 3 секунды
может это?
OutOfMemory issue


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Maksym
Дата 4.12.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Andrey1
А сколько у тебя памяти томкету отведено? и в какой ситуации выпало?
PM MAIL   Вверх
Andrey1
Дата 4.12.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Цитата(MisterCleric @  4.12.2008,  16:49 Найти цитируемый пост)
может это?
OutOfMemory issue 

Спасибо. Попробую. 
Что-то подобное у меня было прописано...

Добавлено через 3 минуты и 45 секунд
Цитата(Maksym @  4.12.2008,  17:00 Найти цитируемый пост)
А сколько у тебя памяти томкету отведено? и в какой ситуации выпало? 

Выпадает при передиплое.... (NetBeans - организует - при сохранении файла).
Старые VM параметры для Томкета уже сбил... Попробую новые свеже-посоветованные smile.


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
Maksym
Дата 4.12.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Andrey1
Видимо у тебя много классов загружается при запуске, возможно динамически генерируемых (как из jsp), и они не влезают в отведенную под классы память perm generation. То есть надо выставить -XX:PermSize=<initial size> -XX:MaxPermSize=<maximum size> побольше.

Добавлено через 6 минут и 58 секунд
Можно еще добавить вот такой параметр -XX:PrintGCDetails чтобы вывести в консоль, как реально расходуется и освобождается память.

Это сообщение отредактировал(а) Maksym - 4.12.2008, 17:38
PM MAIL   Вверх
intr
Дата 4.12.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 2
Всего: 2



Цитата(MisterCleric @ 4.12.2008,  21:49)
Это у тебя во время горячего передеплоя?

Добавлено @ 16:57
может это?
OutOfMemory issue

Рецепт пошел  массыsmile 

Действительно, скорее всего проблема в конфигурации сборщика мусора. 
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Shurr
Дата 5.12.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



Цитата(MisterCleric @ 4.12.2008,  15:49)
может это?
OutOfMemory issue

Какой-то феерически самонадеянный рецепт.
Вместо того, чтобы объяснить, как устанавливаются квоты использования памяти автор предлагает поставить Xmx512m. И не важно, сколько памяти ест приложение, и сколько ее на сервере, 512 и все. Да и MaxPermSize=512m при этом тоже выглядит весело: если perm займет-таки все выделенные ему мегабайты, то где будут располагаться собственно объекты? 

Опять же, параметры тонкой настройки надо смотреть для конкретной JVM: Sun'овская реализация как-бы не единственная.

Если по делу - то согласен с Maksym: для начала увеличить MaxPermSize, если не поможет - смотреть логи сборки мусора.
PM MAIL   Вверх
intr
Дата 5.12.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 2
Всего: 2



Цитата(Shurr @ 5.12.2008,  18:13)

Вместо того, чтобы объяснить, как устанавливаются квоты использования памяти автор предлагает поставить Xmx512m. И не важно, сколько памяти ест приложение, и сколько ее на сервере, 512 и все. Да и MaxPermSize=512m при этом тоже выглядит весело: если perm займет-таки все выделенные ему мегабайты, то где будут располагаться собственно объекты? 

Этот пример взят из книги SeamInAction. И он работает (по крайней мере у меня)! 
А подробности тут http://my.opera.com/karmazilla/blog/2007/0...utofmemoryerror
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Shurr
Дата 5.12.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



Цитата(intr @ 5.12.2008,  12:35)
Этот пример взят из книги SeamInAction. И он работает (по крайней мере у меня)! 
А подробности тут http://my.opera.com/karmazilla/blog/2007/0...utofmemoryerror

То, что пример взят из книги еще не говорит о его качестве. А вот то, что "автор говорит, что у него с этими параметрами сделать OutOfMemoryError не получилось ни разу" уже много говорит об авторе примера.

Начет последней ссылки - тоже не все так просто. У человека была проблема, он ее решил, и описал решение. Но это не значит, что он правильно понял то, о чем пишет. Например, он утверждает, что сборка мусора в перме по умолчанию отключена. Но это не всегда так тут важно чья JDK, в каком режиме запущена (серверный/клиентский и пр.). Хотя для общего понимания проблемы информация конечно полезная.
PM MAIL   Вверх
intr
Дата 5.12.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 2
Всего: 2



Я и не говорю, что это решит все проблемыsmile Но это возможно поможет выйти на правильное решениеsmile 
Кстати, может быть глубокоуважаемый Shurr подскажет ссылки на более качественное описание и решение проблемы (или правильнее сказать класса проблем)?
p/s
Интересно Andrey1 уже решил проблему с outofmemory? Если да то было бы очень интересно узнать что ему помогло.
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Shurr
Дата 5.12.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 1
Всего: 7



intr
Для начала стоит попытаться определиться с чем проблема: с кодом приложения, или с ресурсами. Если проблема в ресурсах - я бы начал с базовых рекомендаций по диагностике тюнингу от производителя, например Tuning Garbage Collection от Sun. Конкретно по ключам запуска можно посмотреть здесь. В случае, если используется не HotSpot JVM от Sun, то и документацию по используемой реализации, например для IBM.

В данном случае ошибка возникает при горячем передеплое, и OutOfMemory вылетает для perm-области. После прочтения документации мы видим, что проблема скорее всего в ресурсах. Конкретнее - при горячем передеплое контейнер держит два полных набора классов: старые классы ждут полной выработки уже запущенных на исполнение задач, новые используются для всех вновь поступивших.
В качестве простого решения можно попробовать увеличить размер perm'а. Логически можно предположить, что увеличивать размер perm'а более чем в два раза сейчас не нужно, т.к. один полный набор классов в текущий момент влазит в выделенную для него память.
Если не поможет - нужно смотреть лог сборки мусора, производится ли она в указанной области, с какими результатами.

В общем и целом ИМХО решение должно быть результатом анализа конкретной ситуации. В вышеупомянутом же "рецепте", предоставлялась "серебрянная пуля", мол запусти с такими параметрами и будет тебе полное счастие. Что и вызвало мои замечания о его (рецепта) малой адекватности.
PM MAIL   Вверх
intr
Дата 5.12.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 2
Всего: 2



Спасибо за развернутый ответsmile
p/s
В большинстве случаев серебряная пуля действуетsmile Хотя согласен, что - "Серебряной пули не существует":)

Это сообщение отредактировал(а) intr - 5.12.2008, 19:02
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Andrey1
Дата 23.7.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 27.2.2004
Где: Moscow

Репутация: 2
Всего: 5



Цитата(intr @  5.12.2008,  17:32 Найти цитируемый пост)
Интересно Andrey1 уже решил проблему с outofmemory? Если да то было бы очень интересно узнать что ему помогло. 

Да, решил. Помог тот самый рецепт "Исследователя бытия" smile.


--------------------
Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания.
из сутры помоста шестого патриарха Хуэйнена
PM MAIL WWW ICQ   Вверх
powerOn
Дата 23.7.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(Andrey1 @  23.7.2009,  11:37 Найти цитируемый пост)
Да, решил. Помог тот самый рецепт "Исследователя бытия" smile. 


Осмелюсь выразить мнение, что данный рецеп вообще говоря не является решением проблемы. По крайней мере у меня он не работает. Это лишь способ отложить проблему на несколько ридиплоев. Пермген в данном случае вылетит допустим не с 5, ну а с 15 раза. А такого можно добиться и без указанных опций:

Цитата

-Xms128m
-Xmx512m
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled 


а путем использования --XmxМНОГОm. 


Это сообщение отредактировал(а) powerOn - 23.7.2009, 21:03


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Maksym
Дата 24.7.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



powerOn
Так дело же в perm gen памяти. А xmx это heap, разве он повлияет на редеплой?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.