Mengatasi Memory Leak (Kebocoran Memori) di Java - Rumah IT

Baru

recent

Mengatasi Memory Leak (Kebocoran Memori) di Java

 Mengatasi Memory Leak (Kebocoran Memori) di Java

Kebocoran memori atau memory leaking terkenal sulit untuk di-debug. Java, dengan pengumpul sampah bawaannya, menangani sebagian besar masalah kebocoran memori. Kebocoran memori sebenarnya terjadi ketika objek disimpan dalam memori tetapi tidak dapat diakses dengan menjalankan kode. Jenis objek yang tidak dapat diakses ini ditangani oleh pengumpul sampah Java (dalam banyak kasus). Jenis kebocoran memori lainnya terjadi ketika kita memiliki referensi yang tidak dibutuhkan ke suatu objek di suatu tempat. Ini bukan kebocoran memori yang sebenarnya karena objek masih dapat diakses, tetapi tidak kurang dapat menyebabkan beberapa bug jahat.


Misalnya, menyimpan objek besar dalam sesi dan tidak membersihkan referensinya. Masalah seperti ini sering kali tidak diperhatikan hingga kami mendapatkan banyak pengguna secara bersamaan dan aplikasi Anda mulai membuang kesalahan memori. Tanpa uji beban, ini kemungkinan besar akan terjadi dalam produksi.

Salah satu cara untuk menemukan kebocoran memori adalah dengan menganalisis tumpukan sampah (head dump). Ada beberapa cara untuk mendapatkan heap dump (tidak termasuk alat pihak ke-3):

1. HeapDumpOnCtrlBreak

Tambahkan opsi ini saat memulai JVM. Ini akan membuat heap dump setiap kali sinyal ctrl+break (kill -3) dikirim ke JVM. HeapDumpPath digunakan untuk mengatur lokasi heap dump.

2. HeapDumpOnOutOfMemoryError
Opsi JVM ini akan membuat heap dump setiap kali aplikasi Anda melontarkan OutOfMemoryError. HeapDumpPath digunakan untuk mengatur lokasi heap dump.

3. Jmap
Jmap adalah alat yang dilengkapi dengan instalasi JDK. Untuk menggunakannya kita memerlukan PID dari proses java kita. Kemudian kita bisa menggunakannya seperti ini:

jmap -dump:file=D:tempheapdumpsdump.bin 1234

4. Jmap (dari aplikasi)
Kita juga bisa menggunakan jmap dari kode kita. Untuk mendapatkan pid dari penggunaan kode, kita perlu menggunakan java.lang.management.ManagementFactory.

String name = ManagementFactory.getRuntimeMXBean().getName();
String pid = name.substring(0, name.indexOf("@"));
After that we can start jmap process like this:
String[] cmd = { "jmap", "-dump:file=D:tempheapdumpsdump.bin", pid }; Process p = Runtime.getRuntime().exec(cmd);

5. HotSpotDiagnosticMXBean
Opsi ini tersedia di Java 1.6+ dan menggunakan sun.management.ManagementFactory.

ManagementFactory.getDiagnosticMXBean().dumpHeap("D:tempheapdumpsdump.bin", true);

Saat kita mendapatkan heap dump, kita perlu menggunakan alat seperti VisualVM (juga disertakan dalam instalasi JDK) untuk benar-benar mencoba dan menemukan kebocorannya.
Tentu saja ada banyak alat berbeda, gratis dan komersial, yang dapat menyediakan pemantauan dan pembuatan tumpukan sampah. Tetapi dalam beberapa kasus ada batasan dalam menyertakan alat pihak ke-3 dalam gambar dan di situlah daftar ini masuk.
All Rights Reserved by Rumah IT - Rumah Teknologi Informasi © 2013 - 2022
Powered By Blogger

Contact Form

Name

Email *

Message *

Powered by Blogger.