Как увеличить пространство кучи Java для приложения Tomcat - PullRequest
25 голосов
/ 27 апреля 2010

Есть много вопросов, которые задают этот или похожий вопрос.

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

Я прочитал эту страницу http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html и там написано в разделе Tomcat

Остановите сервер Tomcat, установите переменную среды CATALINA_OPTS, а затем перезапустите Tomcat. Посмотрите файл tomcat-install / bin / catalina.sh или catalina.bat, чтобы узнать, как используется эта переменная. Например,

set CATALINA_OPTS = -Xms512m -Xmx512m (Windows, "" вокруг значения)
export CATALINA_OPTS = "- Xms512m -Xmx512m" (ksh / bash, "" вокруг значения)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh / csh, "" вокруг значения)

Итак, я заменил строку

set CATALINA_OPTS =

с

set CATALINA_OPTS = -Xms512m -Xmx512m

Но я все еще получаю ошибку.

javax.servlet.ServletException: выполнение сервлета вызвало исключение

первопричина

java.lang.OutOfMemoryError: пространство кучи Java java.lang.reflect.Array.multiNewArray (собственный метод) java.lang.reflect.Array.newInstance (Array.java:90) nom.tam.util.ArrayFuncs.newInstance (ArrayFuncs.java:1028) nom.tam.fits.ImageData.read (ImageData.java:259) nom.tam.fits.Fits.readHDU (Fits.java:573) controller.UploadServlet.retreiveFITSFileFields (UploadServlet.java:206) controller.ScanServerFiles.doPost (ScanServerFiles.java:39) javax.servlet.http.HttpServlet.service (HttpServlet.java:637) javax.servlet.http.HttpServlet.service (HttpServlet.java:717)

Ответы [ 10 ]

25 голосов
/ 27 апреля 2010

Существует механизм, позволяющий это сделать без изменения каких-либо файлов, входящих в дистрибутив. Вы можете создать отдельный файл %CATALINA_HOME%\bin\setenv.bat или $CATALINA_HOME/bin/setenv.sh и поместить туда свои переменные среды. Кроме того, настройки памяти применяются к JVM, а не к Tomcat, поэтому я бы вместо этого установил переменную JAVA_OPTS:

set JAVA_OPTS=-Xmx512m

9 голосов
/ 27 апреля 2010

Ваше изменение вполне может сработать. Требуется ли вашему приложению много памяти - трассировка стека показывает некоторые функции, связанные с Image.

Я предполагаю, что ошибка либо возникает сразу же, с большим файлом, либо происходит позже после нескольких запросов.

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

Если ошибка возникает после нескольких запросов, это может привести к утечке памяти - когда объекты не возвращаются сборщиком мусора. Используя такой инструмент, как JProfiler может помочь вам отслеживать, сколько памяти используется вашей виртуальной машиной, и помочь вам понять, что использует эту память и почему объекты не возвращаются сборщиком мусора.

9 голосов
/ 27 апреля 2010

Прежде всего, вы не можете изменить настройки памяти только для приложения tomcat, а скорее для всего экземпляра tomcat.

Если вы запускаете tomcat из консоли (используя startup.bat), вам нужно отредактировать catalina.bat и поиграть с CATALINA_OPTS. Например:

set CATALINA_OPTS=-Xms512m -Xmx512m

Перезапуск Tomcat применит новые настройки.

Если вы все еще получаете OutOfMemoryError, вам нужно знать, сколько памяти требуется вашему приложению в данный конкретный момент (nom.tam.util.ArrayFuncs ...). Вам придется либо оптимизировать приложение, либо просто увеличить объем памяти, предоставляемой tomcat.

4 голосов
/ 20 марта 2013
  • Открыть вкладку сервера в Eclipse
  • щелкните правой кнопкой мыши, чтобы открыть
  • нажмите на открытую конфигурацию lauch
  • Перейти к аргументам
  • Здесь вы можете добавить в VM аргументы после подтверждения

    -Xms64m -Xmx256m
    
3 голосов
/ 13 июля 2014

Вам необходимо добавить следующие строки в ваш файл catalina.sh.

export CATALINA_OPTS="-Xms512M -Xmx1024M"

ОБНОВЛЕНИЕ : catalina.sh содержание четко говорит -

Не устанавливайте переменные в этом скрипте. Вместо этого поместите их в скрипт setenv.sh в CATALINA_BASE / bin, чтобы сохранить ваши настройки отдельно.

Таким образом, вы можете добавить выше в setenv.sh (создайте файл, если он не существует).

2 голосов
/ 30 января 2019

Самый простой способ сделать это: (В Linux / Ububuntu e.t.c)

Перейдите в каталог tomcat bin:

cd /opt/tomcat8.5/bin

создайте новый файл в каталоге bin "setenv.sh" и сохраните в нем записи, указанные ниже.

export CATALINA_OPTS="$CATALINA_OPTS -Xms512m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx2048m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"

и команда выдачи:

./catalina.sh run

В вашем лог-файле catalina вы можете видеть такую ​​запись:

INFO [main] VersionLoggerListener.log Command line argument: -Xms512m
INFO [main] VersionLoggerListener.log Command line argument: -Xmx2048m
INFO [main] VersionLoggerListener.log Command line argument: -XX:MaxPermSize=256m

Что подтверждает, что вышеуказанные изменения имели место.

Кроме того, значения «Xms512m» и «-Xmx2048m» могут быть соответственно изменены в файле setenv.sh.

Запуск tomcat также может быть выполнен в два этапа. cd /opt/tomcat8.5/bin

Step #1
run ./setenv.sh 
Step #2
./startup.sh
2 голосов
/ 27 ноября 2013

если вы используете Windows, это очень просто. Просто перейдите к переменным System Environnement (щелкните правой кнопкой мыши Компьютер> Свойства> Дополнительные параметры системы> Переменные среды); создайте новую системную переменную с именем = CATALINA_OPTS и значением = -Xms512m -Xmx1024m. перезапустите Tomcat и наслаждайтесь!

0 голосов
/ 12 февраля 2019

Для службы Windows вам нужно запустить tomcat9w.exe (или 6w / 7w / 8w) в зависимости от вашей версии tomcat. Сначала убедитесь, что кот остановлен. Затем дважды щелкните по tomcat9w.exe. Перейдите на вкладку Java. Если вы знаете, что у вас 64-битная Windows с 64-битной Java и 64-битной Tomcat, не стесняйтесь устанавливать объем памяти больше 512. Вам нужно будет выполнить какой-то мониторинг диспетчера задач, чтобы определить, как высоко он будет установлен. Для большинства приложений, разработанных в 2019 году ... Я бы порекомендовал начальный пул памяти 1024 и максимальный пул памяти 2048. Конечно, если ваш компьютер имеет тонны оперативной памяти ... не стесняйтесь идти так высоко, как вы хотите. Также смотрите этот ответ: Как увеличить максимальный размер пула памяти? Apache Tomcat 9

0 голосов
/ 28 марта 2018

Просто установите эту дополнительную строку в catalina.bat файле

ЛИНИЯ НЕТ ВОКРУГ: 143

set "CATALINA_OPTS=-Xms512m -Xmx512m"

И перезапустите сервис Tomcat

0 голосов
/ 14 июля 2015

вы можете установить это в catalina.sh как CATALINA_OPTS = -Xms512m -Xmx512m

Откройте файл tomcat-dir / bin / catalina.sh и добавьте следующую строку в любом месте -

CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx3024m"

и перезапусти свой кот

...