Где установить параметры кучи Java (например, -Xmx) для Tomcat 6 под Ubuntu 9.04?


36

Я запускаю Tomcat, используя пакет tomcat6 из Ubuntu 9.04, который делает демона из Tomcat с помощью jsvc. Я хотел бы знать правильный способ установки параметров кучи Java, как -Xmxдля Tomcat. Я бы хотел разместить конфигурацию там, где она наиболее стилистически правильна, и там, где она меньше всего будет перезаписана обновлениями пакетов Ubuntu.

Варианты, которые я вижу прямо сейчас:

  • Жесткий код их где-то в /etc/init.d/tomcat6.
  • Жесткий код их где-то в /usr/share/tomcat6/bin/catalina.sh.
  • Создайте строку, /usr/share/tomcat6/bin/startup.shчтобы CATALINA_OPTS имела нужные флаги, а затем экспортируйте CATALINA_OPTS в качестве переменной среды. (Похоже, что его подберут catalina.sh.)

Последний вариант звучит как лучший, и его рекомендуют (без объяснения причин) в разделе Увеличение пространства кучи Java в сценарии запуска Tomcat . Но я хотел бы получить второе мнение. Кто-нибудь хочет подтвердить, что нет лучшего способа?

Ответы:


37

По крайней мере, в Ubuntu 10.04, /etc/init.d/tomcat6 source / etc / default / tomcat6, если он существует. Вот где я положил свои переопределения, и я считаю, что это, как правило, «одобренный» способ внесения таких изменений.


7
/ etc / default / tomcat6 - правильное место
Амала

+1 Конфигурация всегда должна быть сделана, /etcесли это возможно.
Маркус Даунинг

2
На CentOS я обнаружил местоположение /etc/tomcat6/tomcat6.conf
khylo

1
На CentOS 6.4 /etc/tomcat6/tomcat6.confэто большой файл, и я не хотел помещать туда свои персональные настройки, поэтому я создал $CATALINA_HOME/bin/setenv.shи получил его /usr/sbin/tomcat6. Надеюсь, что это поможет пользователям CentOS (да, я знаю, что оригинальный вопрос был для Ubuntu).
DuffJ

@khylo Да, мне понадобилось немного времени, чтобы понять это. в CentOS кажется, что /etc/init.d/tomcat6 вызывает / usr / sbin / tomcat6, который НЕ вызывает catalina.sh, а просто напрямую вызывает класс начальной загрузки tomcat (в отличие от Ubuntu /etc/init.d/tomcat6, который звонит catalina.sh)
Эран Медан

16

Если вы загляните в каталог bin вашей инсталляции, вы увидите сценарии catalina.sh или .bat. Если вы посмотрите на них, то увидите, что они запускают сценарий setenv.sh или setenv.bat соответственно, если он существует, для установки переменных среды. Соответствующие переменные среды описаны в комментариях вверху catalina.sh/bat. Для их использования создайте, например, файл $ CATALINA_HOME / bin / setenv.sh с содержимым

export JAVA_OPTS="-server -Xmx512m"

Для Windows вам понадобится, в setenv.bat, что-то вроде

set JAVA_OPTS=-server -Xmx768m

Это верно для tomcat 5.5–7. Оригинальный ответ https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-without-using-the-configuration-progra


1
Хорошо работает для систем без / etc / default / include, например, FreeBSD.
vadipp

7

Найдите файл /etc/tomcat6/tomcat6.conf, в котором есть JAVA_OPTS, готовый и ожидающий вашего комментария (но только если он у вас есть, я использую Centos, а не Ubuntu).

# System-wide configuration file for tomcat6 services
# This will be sourced by tomcat6 and any secondary service
# Values will be overridden by service-specific configuration
# files in /etc/sysconfig
#
# Use this one to change default values for all services
# Change the service specific ones to affect only one service
# (see, for instance, /etc/sysconfig/tomcat6)
#
...
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"

4
Это кажется правильным для CentOS / yum / RPM-версии tomcat. Для пакета Ubuntu / apt-get setenv.sh - верный путь AFAIK
Эран Медан

да, KCD верный, для CentOS tomcat6.conf работает хорошо. Проверено командой ps aux | grep tomcat показывает параметр со значениями, которые я установил.
Маникандан Аруначалам

2

Самый элегантный способ, который я нашел, - это отредактировать /etc/init.d/tomcat6 и добавить его вверху файла:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

Другие варианты, которые я изложил в своем вопросе, похоже, не работают. Изучив сценарий и поэкспериментировав еще, я теперь сомневаюсь, что /usr/share/tomcat6/bin/catalina.sh и /usr/share/tomcat6/bin/startup.sh играют какую-либо роль в запуске tomcat с пакетом tomcat6 Ubuntu. Вместо; /etc/init.d/tomcat6 полностью заменяет любую работу, которую обычно может выполнять catalina.sh/startup.sh.

Я все еще немного обеспокоен потерей этих параметров конфигурации в каком-либо будущем обновлении пакета, но, полагаю, если это произойдет, восстановить их будет довольно легко.


Может ли это быть установлено (экспортировано) в .bashrc для любого пользователя, от которого вы хотите запустить tomcat? [пожалуйста, извините за ужасную грамматику] Это переживет обновления для пакета Tomcat и т. д. Я предполагаю, что средство «run-as» в init запустит обычную оболочку для этого пользователя и получит назначение. См. Также howtogeek.com/howto/linux/install-tomcat-6-on-ubuntu
Дэвид Дж.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.