java.lang.OutOfMemoryError: пространство PermGen (не обычные подозреваемые!) - PullRequest
0 голосов
/ 24 ноября 2011

Ошибка в этой строке на странице jsp!

    <table:table name="sessionScope.users" sort="external" pagesize="50" id="user" class="list" 
    requestURI="/admin-users.html" partialList="true" size="sessionScope.fullListSize">

Я пытался увеличить максимальное значение perm gen до 512m, используя методы, найденные в других публикациях, как для вызова eclipse, так и дляэкземпляр Tomcat.

Хорошо, поэтому требуется немного больше контекста: это моя система разработки, запущенная в Eclipse и указывающая на автономный экземпляр Tomcat, который является сервером в Eclipse.

Согласно Повторяющемуся "PermGen" в Tomcat 6 , у меня в eclipse.ini есть следующее:

--launcher.XXMaxPermSize
512m

// ...

-XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-Xms256m


-Xmx512m

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Хорошо написанное веб-приложение не должно зависать на загрузчике классов при его повторном развертывании, но существует множество причин, по которым оно может.

Если вы работаете на Tomcat, вы можете попробовать это в server.xml:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

Эта страница содержит гораздо больше информации.

0 голосов
/ 24 ноября 2011

Вы, вероятно, один раз слишком много перевели в Tomcat.Откажитесь от Tomcat, и все будет хорошо - пока вы не переполните пространство perm gen повторным перезапуском.

ОБНОВЛЕНИЕ:

Я буду беспокоиться о том, что делает ваша страницаесли это происходит каждый раз, когда вы попадаете на эту страницу.JSP - это шаблон для сервлета, который впоследствии компилируется в файл .class.У вас есть большая проблема, если этот JSP настолько велик, что заполняет ваше пространство для перманентного хранения.

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

Я бы порекомендовал следующее:

  1. Не используйте Eclipse.Если вы развертываете WAR вручную и запускаете Tomcat, наблюдаете ли вы такое же поведение?Запуск Eclipse может быть неправильным.
  2. Вы можете настроить размер памяти и пространство для хранения.Найдите параметры Google для JVM и посмотрите, как это сделать.
  3. Загрузите Visual VM 1.3.3 , установите все плагины и запустите его перед запуском Tomcat.Я дам вам посмотреть, что происходит с вашей памятью в режиме реального времени.Вы также можете увидеть множество других полезных вещей, таких как темы и т. Д. Вам нужно больше данных, а не догадок.
...