Причины нехватки памяти - PullRequest
       40

Причины нехватки памяти

6 голосов
/ 12 апреля 2011

Я постоянно обнаруживаю OOM в PermGen для своей среды:

  1. Java 6
  2. JBoss-4.2.3
  3. Не большое веб-приложение

Я знаю о проблеме String.intern (), но мне не хватает ее полноценного использования. Увеличение размера MaxPermGen не потребовало усилий (с 128 МБ до 256 МБ).

Какие еще причины могут вызвать OOM для PermGen? Какой сценарий расследования является лучшим в такой ситуации (стратегия, инструменты и т. Д.)?

Спасибо за любую помощь

Ответы [ 2 ]

13 голосов
/ 12 апреля 2011

См. Эту заметку

  • Поместите драйвер JDBC в общий / lib (как сказано в документации tomcat), а не в WEB-INF / lib
  • Не включайте регистрацию в общем доступе в WEB-INF / lib, так как tomcat уже загружает его

объекты нового класса помещаются в PermGen и, таким образом, занимают все больше места. Независимо от того, насколько велико пространство PermGen, оно неизбежно достигнет максимума после достаточного количества развертываний. Что вам нужно сделать, это принять меры, чтобы очистить PermGen, чтобы вы могли стабилизировать его размер. Есть два флага JVM, которые обрабатывают эту очистку:

-XX:+CMSPermGenSweepingEnabled

Этот параметр включает PermGen в запуск сборки мусора. По умолчанию пространство PermGen никогда не включается в сборку мусора (и поэтому увеличивается без границ).

-XX:+CMSClassUnloadingEnabled

Этот параметр указывает сборщику мусора PermGen выполнять действия с объектами класса. По умолчанию объекты класса получают исключение, даже когда пространство PermGen посещается во время сборки мусора.

8 голосов
/ 12 апреля 2011

Эта ошибка обычно возникает при повторном развертывании приложения с утечкой загрузчика классов *1002*, потому что это означает, что все ваши классы загружаются снова, а старые версии остаются.

Есть два решения:

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