Gdzie ustawić opcje sterty Java (np. -Xmx) dla Tomcat 6 pod Ubuntu 9.04?

36

Korzystam z Tomcat przy użyciu pakietu tomcat6 z Ubuntu 9.04, który tworzy demona z Tomcat przy użyciu jsvc. Chciałbym znać właściwy sposób ustawiania opcji sterty Java, takich jak -XmxTomcat. Chciałbym umieścić konfigurację wszędzie tam, gdzie jest najbardziej poprawna stylistycznie i gdziekolwiek jest najmniej prawdopodobne, że zostanie ona zastąpiona przez aktualizacje pakietu Ubuntu.

Opcje, które widzę teraz:

  • Zakoduj je gdzieś w środku /etc/init.d/tomcat6.
  • Zakoduj je gdzieś w środku /usr/share/tomcat6/bin/catalina.sh.
  • Utwórz wiersz w, /usr/share/tomcat6/bin/startup.shaby ustawić CATALINA_OPTS tak, aby miał żądane flagi, a następnie wyeksportuj CATALINA_OPTS jako zmienną środowiskową. (Wygląda na to, że zostanie odebrany przez catalina.sh.)

Ostatnia opcja brzmi jak najlepsza i jest zalecana (bez wyjaśnienia dlaczego) w Zwiększanie przestrzeni sterty Javy w skrypcie startowym Tomcat . Ale chciałem uzyskać drugą opinię. Czy ktoś chce potwierdzić, że nie ma lepszego sposobu?

Chris
źródło

Odpowiedzi:

37

Przynajmniej na Ubuntu 10.04, /etc/init.d/tomcat6 sources / etc / default / tomcat6, jeśli istnieje. To tutaj umieszczam moje nadpisania i uważam, że jest to ogólnie „zatwierdzony” sposób wprowadzania takich zmian.

natacado
źródło
7
/ etc / default / tomcat6 to właściwe miejsce
Amala
+1 należy zawsze konfigurować w /etcmiarę możliwości.
Marcus Downing
2
W CentOS znalazłem lokalizację /etc/tomcat6/tomcat6.conf
khylo
1
Na CentOS 6.4 /etc/tomcat6/tomcat6.confjest dużym plikiem i nie chciałem tam umieszczać moich osobistych dostosowań, więc stworzyłem go $CATALINA_HOME/bin/setenv.shi pozyskałem /usr/sbin/tomcat6. Mam nadzieję, że to pomoże użytkownikom CentOS (tak, wiem, że pierwotne pytanie dotyczyło Ubuntu).
DuffJ
@ khylo tak, zajęło mi trochę czasu, aby to rozgryźć. wydaje się w CentOS, że /etc/init.d/tomcat6 wywołuje / usr / sbin / tomcat6, który NIE wywołuje catalina.sh, ale po prostu wywołuje bezpośrednio klasę bootcatap tomcat (w przeciwieństwie do Ubuntu /etc/init.d/tomcat6, który dzwoni catalina.sh)
Eran Medan
16

Jeśli zajrzysz do katalogu bin instalacji, zobaczysz skrypty catalina.sh lub .bat. Jeśli spojrzysz na te, zobaczysz, że uruchamiają odpowiednio skrypt setenv.sh lub setenv.bat, jeśli istnieje, aby ustawić zmienne środowiskowe. Odpowiednie zmienne środowiskowe opisano w komentarzach na górze strony catalina.sh/bat. Aby z nich skorzystać, należy na przykład utworzyć plik $ CATALINA_HOME / bin / setenv.sh z zawartością

export JAVA_OPTS="-server -Xmx512m"

W systemie Windows będziesz potrzebować czegoś takiego w setenv.bat

set JAVA_OPTS=-server -Xmx768m

Dzieje się tak od tomcat 5.5 do 7. Oryginalny answear https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-with-using-the-configuration-progra

viper33m
źródło
1
Działa dobrze w systemach bez / etc / default / include, np. FreeBSD.
vadipp
7

Poszukaj /etc/tomcat6/tomcat6.conf, który ma gotowe wersje JAVA_OPTS i czeka na wycofanie komentarza (ale tylko jeśli w ogóle je masz, używam Centos, a nie 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
źródło
4
Wydaje się, że jest to poprawne dla wersji tomcat CentOS / yum / RPM. W przypadku pakietu Ubuntu / apt-get setenv.sh jest właściwą drogą do przejścia na AFAIK
Eran Medan
tak, KCD jest poprawny, dla centOS tomcat6.conf działa dobrze. Sprawdzone za pomocą polecenia ps aux | grep tomcat pokazuje parametr z ustawionymi wartościami.
Manikandan Arunachalam
2

Najbardziej eleganckim sposobem, jaki do tej pory znalazłem, jest edycja /etc/init.d/tomcat6 i dodanie tego na górze pliku:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

Inne opcje przedstawione w moim pytaniu wydają się nie działać. Po przestudiowaniu skryptu i przeprowadzeniu dalszych eksperymentów wątpię teraz, czy /usr/share/tomcat6/bin/catalina.sh i /usr/share/tomcat6/bin/startup.sh odgrywają jakąkolwiek rolę w uruchamianiu tomcat z pakietem tomcat6 Ubuntu. Zamiast; /etc/init.d/tomcat6 całkowicie zastępuje wszelkie prace, które normalnie mogą być wykonane przez catalina.sh/startup.sh.

Nadal trochę się martwię o utratę tych opcji konfiguracji w jakiejś przyszłej aktualizacji pakietu, ale sądzę, że jeśli tak się stanie, bardzo łatwo byłoby je przywrócić.

Chris
źródło
Czy można to ustawić (wyeksportować) w .bashrc dla dowolnego użytkownika, którego ma używać tomcat? [proszę wybaczyć okropną gramatykę] To przetrwałoby aktualizacje pakietu Tomcat itp. Zakładam, że funkcja „run-as” w init uruchomi normalną powłokę dla tego użytkownika i odbierze zadanie. Zobacz także howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu
David J. Liszewski