OutOfMemoryError: PermGen space - XX: MaxPermSize не работает

Я знаю, что есть тысячи вопросов об этой ошибке, но я не нашел решения своей проблемы. У меня на сервере развернуто три веб-приложения. Эти приложения созданы с использованием java, spring framework и hibenate. На моем сервере есть tomcat6 и opendjdk 1.7. Как я уже сказал, после использования моих приложений в течение некоторого времени появляется пространство OutOfMemoryError: Permgen. Во всех решениях, которые я прочитал, предлагается изменить параметр MaxPermSize с помощью команды:

JAVA_OPTS="-XX:PermSize=256m -XX:MaxPermSize=512m"

or

java -XX:PermSize=256m -XX:MaxPermSize=512m

Я попытался поместить первую команду в файл tomcat6.conf моего сервера, а в качестве файла setenv.sh я попробовал вторую прямо в командной строке, но ни одно из этих решений не работает. Когда я выполняю команду:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Значения моего PermGen Space были такими же, прежде чем я попытался его изменить. Я разговаривал с администратором моего сервера, и он сказал, что эти значения не могут измениться, потому что они основаны на процентах от общей памяти системы, и единственный способ их изменения - увеличить память системы. Я смущен, потому что мой администратор говорит одно, а решения, которые я прочитал, говорят другое. Может это значение поменять? Как я могу увеличить стоимость PermGen?


person Jonathan    schedule 13.04.2016    source источник
comment
Permgen удален в Java8, может, вы могли бы попробовать?   -  person Antoniossss    schedule 13.04.2016
comment
Мои приложения проверены с помощью java 7. Я не знаю, может ли обновление версии java привести к тому, что мои приложения не работают из-за несовместимости между версиями зависимостей моих приложений и java 8.   -  person Jonathan    schedule 14.04.2016
comment
Java имеет обратную совместимость. Это лишь небольшое исключение из этого правила, но это легко исправить и произойдет только в том случае, если вы скомпилируете свое приложение с JDK8, нацеленным на 1.7, и запустите его на 1.7 JVM. stackoverflow.com/questions/32954041/   -  person Antoniossss    schedule 14.04.2016


Ответы (1)


вы упоминаете OutOfMemoryError, но не указали, что MaxPermSpace является причиной исключения. Может быть, у вас просто не хватает памяти кучи. В этом случае должны быть установлены параметры -Xmx и -Xms.

Обычно, если это PermSpace, он упоминается как причина внутри исключения.

person Alexander Petrov    schedule 13.04.2016
comment
Извините за мой сбой в спецификации, но как указано в заголовке, ошибка связана с пространством PermGen - person Jonathan; 14.04.2016