Terkadang ada suatu kasus dimana team anda di haruskan untuk menjalankan dua Instance tomcat di satu server Aws ( ini pengalaman si penulis yah hehe ).
Akan tetapi, ini adalah solusi yang bagus jika tidak ingin mengeluarkan biaya tambahan infrastruktur. Jadi apakah bisa menjalankan dua Instance tomcat di dalam satu server Aws ? Jawabanya sangat bisa guys. Nah pada artikel ini, CodeDadakan akan memberikan panduan untuk melakukan konfigurasi dua tomcat pada satu server aws agar ke dua tomcat itu dapat berjalan dan terhindar dari permasalahan MemoryLeak.
Hal pertama yang harus anda perhatikan adalah, pastikan anda sudah mempunyai dua folder tomcat di dalam server anda ya. [ di sini saya tidak memberikan panduan bagaimana mendownload tomcat itu sendiri ]
Setting Port
Tomcat secara default menggunakan port 8080 untuk http dan 8005 untuk shutdown. Nah, ketika anda menjalankan dua tomcat pada satu server, anda harus memastikan bahwa setiap tomcat tersebut berjalan di port yang berbeda untuk menghindari konflik. Misalnya, instance pertama bisa tetap menggunakan port 8080, dan instance kedua menggunakan port 8081.
Contoh pengaturan port untuk tomcat yang ke dua :
- Http Port : 8081
- Ajp Port : 8010
- Shutdown Port : 8006
Buat file setenv.sh
Tahap selanjutnya adalah membuat file setenv.sh di dalam folder /bin yang ada dalam folder tomcat.
Kemudian copy code konfigurasi sh ini ke dalam file setenv.sh yang barusan anda buat.
export JAVA_OPTS="-Xms2G -Xmx3G -XX:+UseG1GC"
Jangan lupa save file dan lakukan perintah ini, agar file setenv.sh dapat di akses oleh catalina.sh :
chmod +x setenv.sh
Penjelasan code :
- -Xms2G: Mengatur heap memory minimum sebesar 2GB
- -Xmx3G: Mengatur heap memory maksimal sebesar 3GB
- -XX:+UseG1GC: Mengaktifkan G1 Gerbage Collector
Kenapa memberikan set Gerbage Collector pada file setenv.sh ? Karena dalam kasus yang saya dapatkan adalah server menjalankan applikasi yang kompleks, yang dimana saya memerlukan tuning ke Gerbage Collector agar terhindar dari permasalahan heap memory.
Saya melakukan heap memory maksimal sebesar 3GB. di karenakan total RAM pada server yang saya gunakan ada 8. Jadi saya meninggalkan Sekitar 2GB untuk Sistem Operasi, dan tersisa 6 GB untuk dua tomcat yang saya bagi setiap satu Tomcat berisi maksimal heap memory 3GB.
Jadi, jangan mengacu pada konfigurasi setenv.sh yang saya berikan. Sesuaikan dengan total RAM server yang anda gunakan.
Setting file Context.xml
Kita perlu melakukan setting pada context.xml agar tidak terjadinya MemoryLeak ketika dua tomcat tersebut berjalan. Pada tomcat versi 7+ Secara otomatis mendeteksi memory leak dari thread yang tidak di hentikan. namun pastikan hal ini anda mengecek dengan cara membuka file context.xml yang berada pada folder conf apache-tomcat .
Pastikan terdapat kode seperti ini. Jika tidak ada, maka silahkan tambahkan :
Setting To ParallelDeployment
Jika anda sering melakukan redeploy pada applikasi anda tanpa melakukan restart tomcat, Melakukan setting to parallelDeployment adalah solusinya. Kita akan memberikan parameter parallelDeployment pada tag <Host/>. Ini akan sangat membantu mengurangi downtime dan masalah terkait thread yang tertinggal setelah applikasi di redeploy.
Silahkan buka file server.xml di dalam folder conf, dan pastikan tag <Host> memiliki parameter seperti ini :
Optimisasi Thread Pool
Konfigurasi ThreadPool pada server.xml, agar memastikan tomcat kita dapat menangani banyak permintaan tanpa overload. Silahkan buka file server.xml anda dan buat seperti di bawah ini untuk tag Executor dan Connector nya.
Pastikan maxThreads cukup besar untuk menangani permintaan pada aplikasi yang lebih sibuk, dan minSpareThreads cukup untuk menangani permintaan baru tanpa delay
Jalankan Tomcat
Selanjutkan silahkan jalankan satu persatu tomcat anda, seharusnya dua tomcat tersebut dapat berjalan pada server anda. Untuk menjalankan tomcat, anda bisa menggunakan promt ./startup.sh yang berada pada folder bin.
Kemudian jika ingin memantau proses memory yang berjalan pada server aws, anda bisa menggunakan perintah ' top ' , aws akan mengeluarkan output list thread yang berjalan pada server.
Menjalankan dua instance Tomcat di satu instance AWS merupakan langkah cerdas untuk memaksimalkan efisiensi infrastruktur Anda. Dengan mengikuti panduan ini, Anda kini dapat mengelola dan mengonfigurasi server secara lebih efektif, tanpa harus mengorbankan performa aplikasi. Semoga tutorial ini bermanfaat dalam membantu Anda meningkatkan kemampuan manajemen server di AWS. Jangan ragu untuk berbagi pengalaman atau pertanyaan Anda di kolom komentar. Selamat mencoba!
Posting Komentar