Memaksimalkan kinerja aplikasi berbasis Java dengan Performance Tuning
by: qyut http://qyut.wordpress.comJika ada orang yang pernah mengimplementasikan aplikasi Java, kebanyakan akan berkomentar sama: lambat!
Kalau ada yang bertanya bagaimana tanggapan saya, akan saya jawab, iya benar! Karena memang demikianlah adanya.
Teknologi Virtual Machine mengakibatkan hal demikian terjadi, complain serupa tak luput dihadapi pula oleh Microsoftdengan .NET frameworknya.
Kalau ada yang bertanya bagaimana tanggapan saya, akan saya jawab, iya benar! Karena memang demikianlah adanya.
Teknologi Virtual Machine mengakibatkan hal demikian terjadi, complain serupa tak luput dihadapi pula oleh Microsoftdengan .NET frameworknya.
Tapi jangan pesimistis dulu, karena banyak aplikasi dan teknologi yang justru berkembang lebih pesat dengan Java, dan juga beberapa sumbangsih lainnya dari PHP dan .NET.
Agar aplikasi Java bisa lebih mantab kinerjanya, coba lakukan sedikit Performance Tuning.
Sedikit tips dari saya: setting parameter pada java dengan init heap (-Xms) dan max heap (-Xmx) dari aplikasi yang akan dijalankan sekitar 75 – 80 % dari available memory, dan tambahkan parameter -server / -client.
Tentu saja hal ini bukanlah default + best practice untuk semua aplikasi, karena harus disesuaikan dengan kapasitas dan kemampuan komputernya. Jika sebuah server dedicated untuk aplikasi Java tersebut, setting ini sangat ampuh dan bagus.. Akan tetapi apabila server digunakan untuk aplikasi lain (ada sharing cpu+memory) atau aplikasi tersebut berada di PC, perlu dipertimbangkan juga utilitas dari aplikasi lain.
Sedikit tips dari saya: setting parameter pada java dengan init heap (-Xms) dan max heap (-Xmx) dari aplikasi yang akan dijalankan sekitar 75 – 80 % dari available memory, dan tambahkan parameter -server / -client.
Tentu saja hal ini bukanlah default + best practice untuk semua aplikasi, karena harus disesuaikan dengan kapasitas dan kemampuan komputernya. Jika sebuah server dedicated untuk aplikasi Java tersebut, setting ini sangat ampuh dan bagus.. Akan tetapi apabila server digunakan untuk aplikasi lain (ada sharing cpu+memory) atau aplikasi tersebut berada di PC, perlu dipertimbangkan juga utilitas dari aplikasi lain.
Secara default, JVM akan memberikan heap size sebesar 64M.
Space antara init heap dan max heap dianggap sebagai virtual memory dimana JVM akan menyesuaikan besaran heap dengan kebutuhan aplikasi, dalam hal ini adalah pengaruh dari Garbage Collector (GC) .
Logika gampangnya, semakin besar heap, maka semakin jarang pula GC melakukan collecting dalam memory, sehingga utilitas CPU untuk GC juga menurun. Begitu pula sebaliknya.
GC pun memiliki beberapa algoritma yang bisa dipilih dan disesuaikan, akan tetapi sebaiknya tetap menggunakan default collector, karena implikasi GC terhadap aplikasi yang berbeda akan memberikan hasil yang berbeda pula. Terkecuali kita mengetahui secara signifikan bagaimana behavior/perilaku aplikasi tersebut, mungkin bisa kita gunakan algoritma yang lain (Incremental, Concurent, Througput, etc).
Space antara init heap dan max heap dianggap sebagai virtual memory dimana JVM akan menyesuaikan besaran heap dengan kebutuhan aplikasi, dalam hal ini adalah pengaruh dari Garbage Collector (GC) .
Logika gampangnya, semakin besar heap, maka semakin jarang pula GC melakukan collecting dalam memory, sehingga utilitas CPU untuk GC juga menurun. Begitu pula sebaliknya.
GC pun memiliki beberapa algoritma yang bisa dipilih dan disesuaikan, akan tetapi sebaiknya tetap menggunakan default collector, karena implikasi GC terhadap aplikasi yang berbeda akan memberikan hasil yang berbeda pula. Terkecuali kita mengetahui secara signifikan bagaimana behavior/perilaku aplikasi tersebut, mungkin bisa kita gunakan algoritma yang lain (Incremental, Concurent, Througput, etc).
Satu hal lagi yang perlu saya tuliskan disini berdasarkan pengalaman saya sendiri saat tuning. Jika anda mencoba mengoptimasi aplikasi Java untuk menggunakan memory lebih dari 2 atau 3 GB, kemungkinan besar akan gagal, dan kalaupun berhasil, akan crash di tengah jalan..
Ini adalah salah satu kelemahan Java. oooppsss…. tapi tidak selemah itu lhoh… Java yang biasa kita mainkan adalahJVM 32-bit. Solusi-nya adalah dengan meng-upgrade menjadi JVM 64-bit, dan tentu saja harus didukung oleh CPU dan OS dengan kemampuan 64-bit pula.
AFAIK, SUN sudah membuat JVM 64-bit untuk AMD dan SPARC. khusus untuk SPARC, saya sudah pernah mencobanya pula di Solaris.
Ini adalah salah satu kelemahan Java. oooppsss…. tapi tidak selemah itu lhoh… Java yang biasa kita mainkan adalahJVM 32-bit. Solusi-nya adalah dengan meng-upgrade menjadi JVM 64-bit, dan tentu saja harus didukung oleh CPU dan OS dengan kemampuan 64-bit pula.
AFAIK, SUN sudah membuat JVM 64-bit untuk AMD dan SPARC. khusus untuk SPARC, saya sudah pernah mencobanya pula di Solaris.
Tentang Tuning sendiri, salah satu referensinya bisa dibaca lebih lengkap disini: Tuning Garbage Collection with the 1.4.2 Java[tm] Virtual Machine.
Tapi saya yakin referensi itu bisa bikin mabok
Ada yang bikin summary-nya di: Performance Tuning Garbage Collection in Java, saya sangat setuju dengan tulisan di intronya:
Tapi saya yakin referensi itu bisa bikin mabok
Ada yang bikin summary-nya di: Performance Tuning Garbage Collection in Java, saya sangat setuju dengan tulisan di intronya:
- For many applications garbage collection performance is not significant
- Default collector should be first choice
Ada yang mengupas lebih dalam mengenai JVM dan garbage collection: garbage collection.
Sebagai tambahan, perlu diperhatikan pula JRE versi berapa dan provider mana yang digunakan saat ini. Karena beberapa versi provider memiliki fitur yang berbeda. Misalnya JRE dari SUN memiliki fitur-fitur khusus yang tidak dimiliki di JRE dari IBM, dan sebaliknya. Untuk mengetahui versi jvm yang digunakan, jalankan command: java – version.
glossary:
JVM = Java Virtual Machine
JRE = Java Runtime Environment
IBM, SUN, Microsoft, .NET, PHP, JAVA, and all other trademarks are the property of their respective owners.
JVM = Java Virtual Machine
JRE = Java Runtime Environment
IBM, SUN, Microsoft, .NET, PHP, JAVA, and all other trademarks are the property of their respective owners.
Posted in jAVA. 3 Comments »
Be the first to like this post.
February 28, 2007 at 10:26 am
ntar in coba pratekkan di SI
soalnya kuliah di SI sebagian besar adalah JAVA
February 28, 2007 at 10:33 am
August 24, 2007 at 8:27 am