Автор оригинала: mkyong.
Часто время, Tomcat может попадать в следующее java.lang. OutOfMemoryError: постоянное пространство
ошибка.
java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
Обычно это происходит после того, как Tomcat несколько раз перезапускается.
1. Решение
По умолчанию Tomcat выделяется очень мало памяти PermGen для запущенного процесса. Чтобы исправить это, увеличьте параметры памяти PermGen, используя следующие параметры виртуальной машины Java.
-XX:PermSize- Set initial PermGen Size. -XX:MaxPermSize - Set the maximum PermGen Size.
На следующем шаге мы покажем вам, как настроить параметры виртуальной машины в Tomcat в среде Windows и Linux.
2. Окна
Tomcat управляется этим файлом скрипта catalina.bat
, погрузитесь в сценарий, вы узнаете, что catalina.bat
всегда находите и запускайте файл setenv.bat
, чтобы задать переменные среды.
//... rem Get standard environment variables if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome call "%CATALINA_BASE%\bin\setenv.bat" goto setenvDone :checkSetenvHome if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat" :setenvDone //...
2.1 Чтобы установить переменную среды в Windows, создайте setenv.bat
вручную и поместите ее в папку ${tomcat-папка}\bin
.
set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
P.S Никаких двойных кавычек, установите JAVA_OPTS={значение}.
2.2 Перезапустите Tomcat, он вызовет файл setenv.bat
, чтобы автоматически установить переменную среды.
{$tomcat-folder}\bin\catalina.bat restart
3. Линукс
В Linux процесс такой же, просто Tomcat использует catalina.sh
и setenv.sh
вместо этого.
3.1 Узнайте, где находится 3.1 Узнайте, где находится
$ sudo find / -name "catalina.sh" Password: find: /dev/fd/3: Not a directory find: /dev/fd/4: Not a directory /Users/mkyong/Downloads/apache-tomcat-6.0.35/bin/catalina.sh
3.2 Просмотрите catalina.sh
, скрипт, он ведет себя как Windows, но использует setenv.sh
вместо этого.
//... # Ensure that any user defined CLASSPATH variables are not used on startup, # but allow them to be specified in setenv.sh, in rare case when it is needed. CLASSPATH= if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then . "$CATALINA_BASE/bin/setenv.sh" elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then . "$CATALINA_HOME/bin/setenv.sh" fi //...
3.3 Создайте setenv.sh
вручную и поместите его в ${tomcat-папка}\bin\
папка.
export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
P.S С двойными кавычками, экспорт.
3.4 Перезапустите Tomcat.
Рекомендации
- Настройка параметров памяти Tomcat
- Оракул: Представляем постоянное поколение
- Полезные флаги JVM – Часть 5 (Сбор мусора молодого Поколения)
- Как Установить Tomcat На Ubuntu
- Узнайте Размер Вашей Памяти Кучи Java
Оригинал: “https://mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/”