Onde definir opções de heap java (por exemplo, -Xmx) para o Tomcat 6 no Ubuntu 9.04?

36

Estou executando o Tomcat usando o pacote tomcat6 do Ubuntu 9.04, que cria um daemon fora do Tomcat usando jsvc. Gostaria de saber a maneira correta de definir opções de heap Java como -Xmxpara o Tomcat. Eu gostaria de colocar a configuração onde for estilisticamente correta e onde for menos provável que seja sobrescrita pelas atualizações de pacotes do Ubuntu.

As opções que vejo agora:

  • Codifique-os em algum lugar /etc/init.d/tomcat6.
  • Codifique-os em algum lugar /usr/share/tomcat6/bin/catalina.sh.
  • Crie uma linha /usr/share/tomcat6/bin/startup.shpara definir CATALINA_OPTS para ter os sinalizadores desejados e exporte CATALINA_OPTS como uma variável de ambiente. (Parece que será captado por catalina.sh.)

A última opção soa como a melhor e é defendida (sem explicação do porquê) no aumento do heapspace do Java no script de inicialização do Tomcat . Mas eu queria uma segunda opinião. Alguém quer confirmar que não há uma maneira melhor?

Chris
fonte

Respostas:

37

Pelo menos no Ubuntu 10.04, /etc/init.d/tomcat6 fontes / etc / default / tomcat6, se existir. É aí que eu coloco minhas substituições e acredito que geralmente é a maneira "aprovada" de fazer essas alterações.

natacado
fonte
7
/ etc / default / tomcat6 é o lugar apropriado
Amala
A configuração +1 sempre deve ser feita, /etcse possível.
Marcus Downing
2
No CentOS, o local que encontrei foi /etc/tomcat6/tomcat6.conf
khylo
1
No CentOS 6.4, /etc/tomcat6/tomcat6.confé um arquivo grande e eu não queria colocar minhas personalizações pessoais, então criei $CATALINA_HOME/bin/setenv.she criei /usr/sbin/tomcat6. Espero que isso ajude os usuários do CentOS (sim, eu sei que a pergunta original era para o Ubuntu).
DuffJ
@khylo sim, demorei um pouco para descobrir. parece no CentOS que o /etc/init.d/tomcat6 está chamando / usr / sbin / tomcat6, que NÃO está chamando catalina.sh, mas simplesmente chama a classe de inicialização do tomcat diretamente (em oposição ao Ubuntu /etc/init.d/tomcat6 que está chamando catalina.sh)
Eran Medan
16

Se você procurar no diretório bin da instalação, verá os scripts catalina.sh ou .bat. Se você olhar neles, verá que eles executam um script setenv.sh ou setenv.bat, respectivamente, se existir, para definir variáveis ​​de ambiente. As variáveis ​​de ambiente relevantes são descritas nos comentários na parte superior de catalina.sh/bat. Para usá-los, crie, por exemplo, um arquivo $ CATALINA_HOME / bin / setenv.sh com conteúdo

export JAVA_OPTS="-server -Xmx512m"

Para Windows, você precisará, em setenv.bat, de algo como

set JAVA_OPTS=-server -Xmx768m

Isso é verdade do tomcat 5.5 a 7. Resposta original https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-without-using-the-configuration-progra

viper33m
fonte
1
Funciona bem para sistemas sem o / etc / default / include, por exemplo, FreeBSD.
Vadipp 22/05
7

Procure o /etc/tomcat6/tomcat6.conf, que tem os gostos de JAVA_OPTS prontos e esperando que você descomente (mas somente se você tiver, use o Centos e não o 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"
KCD
fonte
4
Parece estar correto para a versão CentOS / yum / RPM do tomcat. Para o Ubuntu / apt-get empacotar o setenv.sh é o caminho certo a seguir AFAIK
Eran Medan
sim, o KCD está correto, pois o centOS tomcat6.conf funciona bem. Verificado com o comando ps aux | grep tomcat mostra o parâmetro com os valores que eu defini.
Manikandan Arunachalam
2

A maneira mais elegante que encontrei até agora é editar o /etc/init.d/tomcat6 e adicioná-lo na parte superior do arquivo:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

As outras opções descritas na minha pergunta não parecem funcionar. Depois de estudar o script e experimentar um pouco mais, agora duvido que /usr/share/tomcat6/bin/catalina.sh e /usr/share/tomcat6/bin/startup.sh desempenhem algum papel na inicialização do tomcat com o pacote Ubuntu do tomcat6. Em vez de; o /etc/init.d/tomcat6 substitui completamente qualquer trabalho que normalmente possa ser feito por catalina.sh/startup.sh.

Ainda estou um pouco preocupado com a perda dessas opções de configuração em alguma atualização futura de pacotes, mas acho que se isso acontecer seria muito fácil restaurá-las.

Chris
fonte
Isso pode ser definido (exportado) no .bashrc para qualquer usuário que você queira que o tomcat seja executado? [por favor, desculpe gramática horrível] Isso sobreviveria às atualizações do pacote Tomcat, etc. Estou assumindo que o recurso "executar como" no init iniciará o shell normal para esse usuário e pegará a tarefa. Veja também howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu
David J. Liszewski