Program yang kita gunakan cenderung mendapatkan beberapa masalah memori saat dijalankan, yang pada gilirannya dapat merusak alokasi memori.
Kebocoran memori menurunkan kinerja sistem dengan mengurangi jumlah memori yang tersedia untuk setiap program di sistem kamu. Masalah memori ini umumnya ditentukan dan diselesaikan oleh pemrogram yang mengakses kode sumber perangkat lunak sistem.
Sistem operasi modern saat ini dapat beradaptasi dengan masalah memori. Sistem operasi dapat langsung mengurangi konsumsi memori dan melepaskan memori yang ditempati oleh aplikasi setelah ditutup.
Dalam tutorial ini, kita akan meninjau apa yang dimaksud dengan kebocoran memori dan bagaimana menangani alat-alatnya.
Alat Deteksi Kebocoran Memori
Apa itu Kebocoran Memori?
- Ketika sebuah program komputer menggunakan memori yang tidak perlu dan mengalokasikannya dengan tidak benar, maka pada akhirnya hal itu menyebabkan kebocoran memori di sistem.
- Terkadang sistem tidak melepaskan alokasi memori yang tidak diinginkan karena sistem tidak melepaskan memori bahkan setelah menutup aplikasi atau program.
- Ketika sebuah program mengkonsumsi lebih dari ruang memori yang dibutuhkan, akibatnya, masalah memori dan perlambatan kinerja sistem akan terjadi.
- Dalam hal pemrograman berorientasi objek, jika suatu objek disimpan dalam memori tetapi tidak dapat diakses oleh kode program (Mendefinisikan objek dan mengalokasikan memori tetapi masih kita mendapatkan kesalahan yang menyatakan bahwa objek tidak ditentukan/ not defined).
- Ada beberapa bahasa pemrograman seperti C dan C++ yang tidak mendukung pengumpulan sampah (garbage collection) otomatis secara implisit dan dapat menimbulkan masalah kebocoran memori saat menggunakannya (Java menggunakan proses garbage collection untuk menangani kebocoran memori).
- Kebocoran memori mengurangi kinerja sistem dengan mengurangi ruang memori yang tersedia, meningkatkan jumlah thrashing dan akhirnya menyebabkan kegagalan atau memperlambat sistem.
- Manajemen Kebocoran Memori adalah mekanisme yang berjalan di sistem operasi untuk mengalokasikan memori secara dinamis dan melepaskan saat tidak digunakan.
Jenis Kebocoran Memori
Kebocoran memori dapat dikategorikan menjadi beberapa jenis, dan beberapa di antaranya dijelaskan di bawah ini.
- Leaked Data Member: Memori yang dialokasikan untuk anggota class sedang tidak dialokasikan sebelum class dihancurkan.
- Leaked Global Memory: Kebocoran memori yang bukan merupakan bagian dari class yang dibuat tetapi dapat digunakan oleh berbagai fungsi dan metode.
- Leaked Static Memory: Kebocoran memori yang didedikasikan khusus untuk fungsi yang ditentukan oleh class yang dibuat.
- Virtual Memory Leak: Ketika base class tidak dideklarasikan secara virtual maka destruktor untuk objek turunan tidak dapat dipanggil.
- Memanggil deallocator yang salah.
Manajemen Kebocoran Memori
- Kebocoran memori tetap ada ketika tidak ada referensi ke alokasi memori.
- Kebocoran memori seperti itu menyebabkan program berjalan lebih dari waktu yang diharapkan dan menghabiskan memori berlebih dengan terus berjalan di latar belakang atau di server.
- Perangkat portabel lebih terpengaruh oleh kebocoran memori karena mengandung lebih sedikit memori dan mengurangi kapasitas pemrosesan perangkat.
- Kita dapat mengambil Contoh Sistem Manajemen Kebocoran Memori .NET seperti:
- CLR (Common Language Runtime) menangani alokasi sumber daya di .NET dan merilisnya.
- .NET mendukung 3 jenis alokasi memori seperti:
- Stack: Menyimpan variabel lokal dan parameter metode. Referensi untuk setiap objek yang dibuat disimpan di Stack.
- Unmanaged Heap: Kode yang tidak dikelola akan mengalokasikan objek ke Unmanaged stack.
- Managed Heap: Kode yang dikelola akan mengalokasikan objek pada managed stack.
- Garbage collector memeriksa benda-benda yang tidak digunakan, dan setelah ditemukan, benda tersebut akan dibuang oleh Garbage collector.
- Garbage collector mengelola tree atau struktur seperti grafik untuk memeriksa akar aplikasi ke setiap objek yang dapat diakses secara langsung maupun tidak langsung dan jika ada objek yang tidak ditemukan maka hanya akan dimasukan ke dalam Garbage collector.
Alat Manajemen dan Deteksi Kebocoran Memori (Memory Leak) terbaik
Diberikan di bawah ini adalah daftar alat Deteksi dan Manajemen Kebocoran Memori yang paling umum digunakan.
GCeasy
Alat gratis ini menyelesaikan masalah memori dengan cepat dan dikenal sebagai penganalisis memori yang hebat.
GCeasy adalah Alat Analisis Log Garbage Collector pertama yang dipandu mesin.
GCeasy juga Mendukung semua Android GC logs, menggunakan Algoritma Machine Learning untuk mendeteksi masalah memori yang terjadi, dan juga memberi tahu kamu tentang masalah yang mungkin akan terjadi di masa mendatang.
Deteksi masalah otomatis, analisis GC online instan, dan analisis log GC terpadu adalah beberapa fitur penting dari alat ini.
Eclipse MAT
Eclipse MAT dikenal sebagai Java Heap Analyzer yang cepat dengan banyak fitur.
Eclipse MAT membantu mengurangi konsumsi memori dan mendeteksi kebocoran memori.
Eclipse MAT dapat menghasilkan laporan otomatis yang menghasilkan informasi tentang kesalahan yang mencegah garbage collector mengumpulkan objek.
Fokus utama dari alat ini tetap pada konsumsi memori yang tinggi dan Out Of Memory Errors.
Proyek ini menggabungkan Eclipse Photon, Eclipse Oxygen, Neon, Kepler, dll.
Memcheck dari Valgrind
Memcheck dapat mendeteksi masalah memori berikut berdasarkan panggilan memori malloc, new, free, dan deleted:
- Memori yang tidak diinisialisasi
- Pointer yang hilang
- Menggunakan memori yang dibebaskan
- Mengakses area yang tidak pantas di berada di stack
Memcheck memeriksa dan mengarahkan parameter secara otomatis di mana pun mereka ditentukan.
Memcheck by Valgrind adalah software komersial untuk mendeteksi kesalahan memori.
Berguna untuk mendeteksi kesalahan memori yang terjadi di C dan C++. Memcheck juga memeriksa apakah buffer yang ditentukan oleh program dapat dialamatkan atau tidak.
Memcheck melacak heap blocks untuk mengenali unfree block setelah program keluar.
PVS-Studio
PVS-Studio adalah alat yang mendeteksi kesalahan dalam kode C, C++, C#, dan Java.
PVS-Studio dapat mendeteksi berbagai kesalahan yang terkait dengan kebocoran memori dan sumber daya lainnya.
Solusi SAST yang menemukan potensi kerentanan dan mendukung standar keselamatan dan keamanan: OWASP TOP 10, MISRA C, C++, AUTOSAR, CWE.
Terintegrasi ke IDE populer, CI/CD, dan platform lainnya.
Memberikan laporan dan pengingat terperinci kepada pengembang dan manajer (Blame Notifier).
GlowCode
GlowCode adalah penganalisis memori dan kinerja real-time komersial khusus untuk Windows dan .NET Framework.
GlowCode mengidentifikasi kebocoran memori dalam aplikasi yang berjalan yang ditulis dalam bahasa yang sesuai dengan C++, C# atau NET.
GlowCode juga memeriksa aliran kinerja, gap cakupan kode, dan konsumsi memori yang berlebihan.
Mendukung Windows 10 dan Windows Server 2016 dan menyediakan deteksi dini masalah kinerja dan memori dalam sistem yang sedang berjalan.
Mendukung kode native, managed, dan campuran.
AQTime by Smartbear
AQTime adalah alat milik Smartbear yang mendukung Delphi, C#, C++, .NET, Java, dll.
Dapat mendeteksi kebocoran memori, bottlenecks kinerja, dan gap cakupan kode dalam sistem aplikasi.
AQTime dapat menganalisis informasi secara efisien tentang memori dan kinerja yang kompleks untuk mengidentifikasi bug dengan penyebabnya.
Pendekatan tercepat adalah mendeteksi kebocoran memori, cakupan kode, dan kemacetan kinerja.
Analisis aplikasi Delphi dari “atas ke bawah” untuk mengidentifikasi kebocoran memori dan sumber daya.
WinDbg
Windbg untuk Windows digunakan untuk mengidentifikasi dump memori kernel dan memeriksa register CPU. Hadir dalam versi berbeda untuk perangkat Windows, aplikasi Web dan Desktop.
Fitur untuk mengidentifikasi crash dump mode pengguna dikenal sebagai “Post–Mortem Debugging”.
Kamu dapat menggunakan ekstensi DLL untuk men-debug Command Language Runtime (CLR).
Windbg hadir dengan Ext.dll yang dimuat sebelumnya yang digunakan sebagai ekstensi Debugger Windows standar.
BoundsChecker
BoundsChecker adalah alat memori dan alat validasi API untuk perangkat lunak C++.
Ada dua ActiveCheck dan FinalCheck, ActiveCheck dilakukan terhadap aplikasi dan FinalCheck digunakan untuk memeriksa bentuk instrumental sistem.
ActiveCheck dapat mendeteksi kebocoran memori dengan memantau panggilan API dan COM.
FinalCheck hadir dengan fitur ActiveCheck bersama dengan kemampuan untuk mendeteksi buffer overflow dan memori yang tidak ditentukan (undefined).
Memory Overrun Detection adalah fitur terbaik yang dikenal dengan BoundsChecker.
Deleaker
Deleaker adalah alat pendeteksi kebocoran memori yang berdiri sendiri dan juga digunakan sebagai ekstensi Visual C++.
Deleaker dapat mendeteksi kebocoran memori di stack dan memori virtual serta terintegrasi dengan mudah dengan IDE apa pun.
Versi mandiri men-debug aplikasi untuk menunjukkan alokasi objek saat ini.
Mendukung semua sistem 32 bit juga 64 bit dan terintegrasi penuh dengan Visual Studio.
Dapat menghasilkan laporan yang kaya dan mengekspor hasil akhir ke XML.
Dr. Memory
Dr. Memory adalah alat pemantauan memori gratis untuk Windows, Linux, dan Mac.
Alat ini mampu mengidentifikasi memori yang tidak diinisialisasi dan tidak dapat dialamatkan serta memori yang dibebaskan.
Dr Memory mendefinisikan 3 jenis kesalahan:
- Still – lokasi yang dapat dijangkau: Memori dapat dijangkau oleh aplikasi.
- Leak: Memori tidak dapat dijangkau oleh aplikasi.
- Possible Leak: Memori yang dapat dijangkau melalui pointer.
Selanjutnya, Dr. Memory mendefinisikan dua jenis kebocoran seperti kebocoran langsung dan tidak langsung.
Intel Inspector XE
Alat eksklusif ini membantu deteksi dini kebocoran memori dan membantu mengurangi biaya untuk memperbaiki kebocoran memori.
Dikenal sebagai error debugger untuk aplikasi C, C++ yang berjalan di Windows dan Linux tanpa menggunakan compiler khusus.
Intel Inspector XE juga tersedia sebagai bagian dari Intel Parallel Studio XE dan Intel System Studio.
Intel Inspector XE melakukan Analisis Statis dan Dinamis untuk mengidentifikasi akar penyebab kebocoran memori.
Analisis dinamis mendeteksi akar penyebab kompleks untuk kebocoran memori yang tidak terdeteksi oleh analisis Statis.
Intel Inspector XE mendeteksi memori yang rusak, akses memori ilegal, memori yang tidak diinisialisasi, dan memori yang tidak konsisten, dll.
Insure++
Parasoft Insure++ adalah debugger memori komersial untuk C/C++.
Insure++ secara otomatis mendeteksi pelanggaran memori yang tidak akurat, array-bound, dan memori yang tidak terisi.
Mampu melakukan stack trace ketika terjadi kebocoran aktual.
Untuk rangkaian kode yang diuji, Insure++ menghasilkan Urutan Kode Linear dan Urutan Kode Langsung.
Visual Leak Detector for Visual C++ 2008-2015
Visual Leak Detector adalah alat pendeteksi kebocoran memori open-source gratis untuk C/C++.
Alat ini akan mendiagnosis kebocoran memori dengan cepat di aplikasi C++ dan memilih modul yang perlu dikecualikan dari kebocoran memori.
Visual C++ menyediakan deteksi kebocoran memori bawaan, satu set lengkap blok yang bocor.
Laporan kebocoran memori yang dapat disesuaikan dan terperinci adalah fitur terbaik dari alat ini.
Visual Studio Profiler
Visual Studio hadir dengan Memory Usage Tool yang membantu mendeteksi kebocoran memori dan memori yang tidak efisien.
Alat ini digunakan untuk aplikasi desktop, aplikasi ASP.NET, dan aplikasi Windows.
Kamu dapat mengambil snapshot dari memori terkelola dan asli dan dapat menganalisis snapshot tunggal untuk memahami dampak suatu objek pada memori.
Kamu dapat menggunakan lebih dari satu snapshot untuk menemukan akar penyebab penggunaan memori berlebih.
Mengaktifkan kode sumber yang didokumentasikan sepenuhnya ke perpustakaan.
Mtuner
Mtuner adalah pencari kebocoran memori yang digunakan untuk aplikasi Windows dan PlayStation.
Menyediakan fungsionalitas tambahan untuk profil memori.
Mtuner dapat menangani sejumlah alokasi per detik dengan penskalaan kinerja linier.
Mtuner hadir dengan profil berbasis baris perintah yang membantu melacak perubahan harian dalam penggunaan memori.
Windows Leak Detector
Windows Leak Detector adalah alat pendeteksi kebocoran memori untuk aplikasi Windows.
Beberapa fitur Windows Leak Detectors adalah:
- Tidak ada kode sumber yang diperlukan dan jika ada maka memerlukan lebih sedikit modifikasi.
- Kamu dapat menganalisis aplikasi Windows apa pun yang ditulis dalam bahasa apa pun.
- Efektif dan paling cocok untuk aplikasi yang dikembangkan dalam pola Cyclic.
Alat ini secara konsisten mengalami pengembangan dan masih memiliki beberapa keterbatasan:
- Kamu hanya dapat mengelola satu proses pada satu waktu, fitur Inter-process Communication akan ditambahkan di masa mendatang.
- Windows Leak Detector hanya menganalisis fungsi HeapAlloc, HeapRealloc, dan HealFree.
AddressSanitizer (A San)
Alat sumber terbuka ini dirancang untuk mendeteksi kebocoran memori dalam program C/C++.
Alat tercepat terdiri dari Compiler Instrumentation Module dan Run-time library.
Alat ini dapat menemukan buffer overflow Heap dan Stack juga kebocoran memori.
LeakSanitizer terintegrasi dengan AddressSanitizer yang melakukan tugas mendeteksi kebocoran memori.
Dengan LeakSanitizer, kita dapat menentukan instruksi untuk mengabaikan beberapa kebocoran memori dengan mengirimkannya dalam file Supresi yang terpisah.
Alat ini didukung di Linux, Mac, OS X, Android, dan Simulator iOS.
GCViewer
GCViewer adalah alat gratis yang dibuat oleh IBM, HP, Sun Oracle, dan BEA JVM.
Alat ini digunakan untuk mem-parsing dan menganalisis file GC Log.
Kamu dapat menghasilkan data dalam format CSV sebagai aplikasi spreadsheet.
GCViewer berfungsi pada Garbage Collector Verbose. Singkatnya, Koleksi Sampah Verbose adalah:
- Pembangkit garbage collection berbasis event untuk setiap operasi.
- Output Verbose Garbage Collection berisi ID kenaikan dan stempel waktu lokal.
Plumbr
Ini adalah alat komersial yang digunakan untuk memeriksa kebocoran memori dan pengumpulan sampah dalam aplikasi JVM.
Plumbr didasarkan pada dua modul penting seperti Agen dan Portal. Agen mendukung JVM dan mengirimkan pengumpulan sampah dan informasi kebocoran memori ke Portal.
Kamu dapat melihat informasi tentang penggunaan memori dan stack di Portal. Alat ini menggunakan algoritma pendeteksian yang didasarkan pada analisis data kinerja.
.NET Memory Validator
.NET Memory Validator adalah penganalisis kebocoran memori komersial, profiler memori yang digunakan untuk pengembangan perangkat lunak dan jaminan kualitas (quality assurance).
.NET Memory Validator dikenal sebagai cara tercepat untuk memantau beberapa alokasi memori, memberikan banyak informasi seperti:
- Allocations: Menampilkan statistik alokasi berkode warna berdasarkan class dan metode yang ditentukan untuk fungsi pengalokasian.
- Objects: Tampilan objek menampilkan objek berkode warna dan statistik alokasi memori untuk menjalankan aplikasi.
- Generations: Menampilkan jumlah objek per tipe objek untuk setiap generasi objek yang dialokasikan oleh aplikasi.
- Memory: Tampilan memori menampilkan objek saat ini dengan informasi tentang jenis objek, ukuran alokasi, stack panggilan, dan stempel waktu.
- Analysis: Tampilan ini menampilkan penggunaan memori.
Fungsi utama alat ini termasuk deteksi kebocoran memori, penanganan kebocoran memori, Menjalankan tes regresi untuk mengidentifikasi kebocoran memori.
Validator memori .NET kompatibel dengan versi apa pun dari framework .NET dan CLR.
Mudah digunakan, alat yang dapat dikonfigurasi, kuat, dan serbaguna untuk mengidentifikasi kebocoran memori.
Dynatrace
Dynatrace adalah alat komersial yang mendukung Manajemen Kinerja All-in-One dan terdiri dari pemantauan stack penuh, analisis transaksi tunggal.
Dynatrace menyediakan alat deteksi kebocoran memori untuk menentukan konsumsi memori.
Alat deteksi kebocoran memori Dynatrace Java tersedia untuk aplikasi yang ditulis dalam Java dan .NET Profiler Tools digunakan untuk aplikasi yang berjalan di Java.
Dengan tampilan yang unik, kamu dapat menemukan objek yang tidak menggunakan memori secara efektif.
Kamu dapat melakukan memory trending dumps untuk penggunaan memori.
Alat ini membantu mengidentifikasi objek-objek yang terus meningkatkan konsumsi memori dan tidak dialokasikan dengan benar.
Kesimpulan
Alat manajemen kebocoran memori mengurangi proporsi upaya dan waktu yang dihabiskan untuk mengelola memori. Mengelola akses dan alokasi memori & melacak kebocoran adalah tugas penting sehingga Memori adalah tulang punggung perangkat lunak apa pun untuk menyimpan dan mengelola data kamu secara efisien.
Sekali lagi, tanpa alokasi memori yang tepat, seseorang bahkan tidak dapat menjalankan sistem aplikasi. Untuk menghindari kegagalan sistem dan meningkatkan kinerjanya, kita perlu melakukan manajemen kebocoran memori.
Dengan mengingat kebutuhan ini, banyak organisasi menggunakan alat yang tersedia untuk ini, sementara pada akhirnya akan membuat segalanya lebih mudah bagi siapapun terutama pengguna akhir.
Tinggalkan pesan