Thursday, September 18, 2014

Lesson 17: OutOfMemory di apache tomcat

ternyata beberapa hari yang lalu gue find out kalo Tomcat di linux sana juga bisa kena out of memory exception juga. gue pikir karena spec hardware, terutama memory, padahal uda gede juga memory nya jadi gak bakal kehabisan memory, ternyata gw salah sodara-dara.

ntah proses apa yang bikin system di server bisa sampe kehabisan resource, kayana salah satu alasan itu karena.... kita menjalankan (start) 2 instace apache tomcat yang berbeda, dibedain port nya sih. sebenernya tujuannya awalnya baik, yang satu buat production purpose satu lagi buat keperluan testing. eh ternyata malah kehabisan memory si apache tomcat.

sebenernya beberapa hari lalu itu minta di-tracing ama senior/lead developer kenapa bisa sampe kejadian seperti itu. symptom nya sih begitu kita hit alamat ip server production tidak selesai loading juga (muter2 terus) akhirnya minta bantuan di-tracing ama senior developer di sini.

setelah cek sana-sini ternyata hal penting untuk nge-trace hal seperti ini tuh cek aja log apache server, nama filenya 'catalina.out'.
pertama kali buka folder 'logs' di folder home apache tomcat pasti bingung banyak banget file di sana, tapi untuk proses yang sedang berjalan cukup dirun command tail aja ke file catalina.out tsb.
tail -f catalina.out
lalu untuk ngecek sisa memory di sistem bisa pake command berikut:
free -g
atau kalo mau dalam satuan Megabyte:
 free -m
untuk cek proses yang lagi berjalan di system, bisa pakai command berikut:
ps aux | grep tomcat-8080 
(setelah grep sebenernya boleh ganti keyword lain untuk proses spesifik yang lain)

EDIT:
tambahan, ada file tertentu juga yang perlu ditambahkan di dalam folder /bin yaitu file:
setenv.sh
isinya filenya seperti ini:
${tomcat-folder}\bin\setenv.sh
export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
untuk angka di parameter size boleh disesuaikan dengan kebutuhan, dinaekin nilainya kalo dirasa kurang.
untuk tau apakah parameter tambahan PermSize tsb dijalankan atau tidak, bisa dicek lewat command ps aux

[smlfes@jkt-fes bin]$ ps aux | grep tomcat-8080
smlfes    65095  0.5  8.0 7876828 1305940 ?     Sl   Sep18   6:09 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF-8 -Xms512m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=2048m -Djava.endorsed.dirs=/opt/apache-tomcat-8080/endorsed -classpath /opt/apache-tomcat-8080/bin/bootstrap.jar:/opt/apache-tomcat-8080/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-8080 -Dcatalina.home=/opt/apache-tomcat-8080 -Djava.io.tmpdir=/opt/apache-tomcat-8080/temp org.apache.catalina.startup.Bootstrap start
smlfes    89461  0.0  0.0 103248   848 pts/2    S+   10:27   0:00 grep tomcat-8080
jangan lupa untuk restart servernya dulu

 credit to mkyong

No comments:

Post a Comment