Di mana mengatur opsi heap java (mis. -Xmx) untuk Tomcat 6 di bawah Ubuntu 9.04?

36

Saya menjalankan Tomcat menggunakan paket tomcat6 dari Ubuntu 9.04, yang membuat daemon dari Tomcat menggunakan jsvc. Saya ingin tahu cara yang tepat untuk mengatur opsi Java heap seperti -Xmxuntuk Tomcat Saya ingin menempatkan konfigurasi di mana saja dengan gaya paling benar, dan di mana pun paling tidak mungkin akan ditimpa oleh pembaruan paket Ubuntu.

Opsi yang saya lihat sekarang:

  • Hard-kode mereka di suatu tempat di /etc/init.d/tomcat6.
  • Hard-kode mereka di suatu tempat di /usr/share/tomcat6/bin/catalina.sh.
  • Buat garis dalam /usr/share/tomcat6/bin/startup.shuntuk mengatur CATALINA_OPTS untuk memiliki flag yang diinginkan, dan kemudian ekspor CATALINA_OPTS sebagai variabel lingkungan. (Ini sepertinya akan diambil oleh catalina.sh.)

Opsi terakhir terdengar seperti yang terbaik, dan dianjurkan (tanpa penjelasan mengapa) di Meningkatkan heapspace Java dalam skrip startup Tomcat . Tapi saya ingin mendapatkan pendapat kedua. Adakah yang ingin mengkonfirmasi bahwa tidak ada cara yang lebih baik?

Chris
sumber

Jawaban:

37

Setidaknya pada Ubuntu 10,04, /etc/init.d/tomcat6 sumber / etc / default / tomcat6 jika ada. Di situlah saya meletakkan penggantian saya, dan saya percaya itu umumnya merupakan cara "disetujui" untuk melakukan perubahan seperti itu.

natacado
sumber
7
/ etc / default / tomcat6 adalah tempat yang tepat
Amala
Konfigurasi +1 harus selalu dilakukan /etcjika memungkinkan.
Marcus Downing
2
Di CentOS, lokasi yang saya temukan adalah /etc/tomcat6/tomcat6.conf
khylo
1
Pada CentOS 6.4, /etc/tomcat6/tomcat6.confadalah file besar dan saya tidak ingin memasukkan kustomisasi pribadi saya di sana, jadi saya membuat $CATALINA_HOME/bin/setenv.shdan mengambilnya /usr/sbin/tomcat6. Semoga ini bisa membantu pengguna CentOS (ya, saya tahu pertanyaan aslinya adalah untuk Ubuntu).
DuffJ
@khylo ya, butuh waktu beberapa saat untuk mencari tahu. tampaknya di CentOS /etc/init.d/tomcat6 memanggil / usr / sbin / tomcat6 yang TIDAK memanggil catalina.sh tetapi cukup memanggil kelas bootstrap tomcat secara langsung (sebagai lawan dari Ubuntu /etc/init.d/tomcat6 yang menelepon catalina.sh)
Eran Medan
16

Jika Anda melihat di direktori bin instalasi Anda, Anda akan melihat skrip catalina.sh atau .bat. Jika Anda melihat ini, Anda akan melihat bahwa mereka menjalankan skrip setenv.sh atau setenv.bat, jika ada, untuk mengatur variabel lingkungan. Variabel lingkungan yang relevan dijelaskan dalam komentar di bagian atas catalina.sh/bat. Untuk menggunakannya buat, misalnya, file $ CATALINA_HOME / bin / setenv.sh dengan konten

export JAVA_OPTS="-server -Xmx512m"

Untuk Windows Anda akan membutuhkan, di setenv.bat, sesuatu seperti

set JAVA_OPTS=-server -Xmx768m

Ini benar dari tomcat 5.5 hingga 7. Asli menjawab https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-without-using-the-configuration-progra

viper33m
sumber
1
Bekerja dengan baik untuk sistem tanpa / etc / default / include, misalnya, FreeBSD.
vadipp
7

Cari /etc/tomcat6/tomcat6.conf yang memiliki orang-orang seperti JAVA_OPTS yang siap dan menunggu Anda untuk menghapus komentar (tetapi hanya jika Anda memilikinya, saya menggunakan Centos bukan 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
sumber
4
Ini tampaknya benar untuk versi CentOS / yum / RPM dari kucing jantan. Untuk paket Ubuntu / apt-get, setenv.sh adalah cara yang tepat untuk menuju AFAIK
Eran Medan
ya, KCD benar, karena centOS tomcat6.conf berfungsi dengan baik. Diperiksa dengan perintah ps aux | grep tomcat itu menunjukkan parameter dengan nilai yang saya tetapkan.
Manikandan Arunachalam
2

Cara paling elegan yang saya temukan sejauh ini adalah mengedit /etc/init.d/tomcat6 dan menambahkan ini di bagian atas file:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

Pilihan lain yang saya uraikan dalam pertanyaan saya sepertinya tidak berhasil. Setelah mempelajari skrip dan bereksperimen lagi, saya sekarang ragu bahwa /usr/share/tomcat6/bin/catalina.sh dan /usr/share/tomcat6/bin/startup.sh berperan dalam startup tomcat dengan paket tomcat6 Ubuntu. Sebagai gantinya; /etc/init.d/tomcat6 sepenuhnya menggantikan semua pekerjaan yang biasanya dilakukan oleh catalina.sh/startup.sh.

Saya masih sedikit khawatir kehilangan opsi konfigurasi ini di beberapa pembaruan paket di masa depan, tapi saya kira jika itu terjadi, akan sangat mudah untuk mengembalikannya.

Chris
sumber
Bisakah ini disetel (diekspor) di .bashrc untuk semua pengguna yang Anda ingin tomcat jalankan? [permisi tata bahasa mengerikan] Itu akan bertahan pembaruan untuk paket Tomcat, dll. Saya mengasumsikan fasilitas "run-as" di init akan memulai shell normal untuk pengguna itu dan mengambil tugas. Lihat juga howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu
David J. Liszewski