Alat untuk memecahkan masalah memori
Catatan
Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.
Artikel ini berlaku untuk: ✔️ Basic/Standard ✔️ Enterprise
Artikel ini menjelaskan berbagai alat yang berguna untuk memecahkan masalah memori Java. Anda dapat menggunakan alat-alat ini dalam banyak skenario tidak terbatas pada masalah memori, tetapi artikel ini hanya berfokus pada topik memori.
Pemberitahuan dan diagnostik
Bagian berikut menjelaskan pemberitahuan dan diagnostik kesehatan sumber daya yang tersedia melalui portal Azure.
Kondisi sumber daya
Anda dapat memantau peristiwa siklus hidup aplikasi dan menyiapkan pemberitahuan dengan log Aktivitas Azure dan Azure Service Health. Untuk informasi selengkapnya, lihat Memantau peristiwa siklus hidup aplikasi menggunakan log Azure Activity dan Azure Service Health.
Kesehatan sumber daya mengirimkan pemberitahuan tentang peristiwa mulai ulang aplikasi karena masalah kontainer di luar memori (OOM). Untuk informasi selengkapnya, lihat Masalah mulai ulang aplikasi yang disebabkan oleh masalah di luar memori.
Cuplikan layar berikut menunjukkan pemberitahuan kesehatan sumber daya aplikasi yang menunjukkan masalah OOM.
Mendiagnosis dan memecahkan masalah
Diagnostik Azure Spring Apps adalah pengalaman interaktif untuk memecahkan masalah aplikasi Anda tanpa konfigurasi. Untuk informasi selengkapnya, lihat Mendiagnosis sendiri dan memecahkan masalah di Azure Spring Apps.
Dalam portal Azure, Anda dapat menemukan Penggunaan Memori di bawah Diagnosis dan selesaikan masalah, seperti yang ditunjukkan pada cuplikan layar berikut.
Penggunaan Memori menyediakan diagnosis sederhana untuk penggunaan memori aplikasi, seperti yang ditunjukkan pada cuplikan layar berikut.
Metrik
Bagian berikut menjelaskan metrik yang mencakup masalah termasuk penggunaan memori tinggi, memori timbunan yang terlalu besar, dan pengumpulan sampah abnormal (terlalu sering atau tidak cukup sering). Untuk informasi selengkapnya, lihat Mulai Cepat: Memantau aplikasi Azure Spring Apps dengan log, metrik, dan pelacakan.
Penggunaan memori aplikasi
Penggunaan memori aplikasi adalah persentase yang sama dengan memori aplikasi yang digunakan dibagi dengan batas memori aplikasi. Nilai ini menunjukkan seluruh memori aplikasi.
jvm.memory.used/committed/max
Untuk memori JVM, ada tiga metrik: jvm.memory.used
, , jvm.memory.committed
dan jvm.memory.max
, yang dijelaskan dalam daftar berikut.
"Memori JVM" bukan konsep yang jelas. Di sini, jvm.memory
adalah jumlah memori timbunan dan bekas permGen bagian dari memori non-heap. Memori JVM tidak menyertakan memori langsung atau memori lain seperti tumpukan utas. Spring Boot Actuator mengumpulkan ketiga metrik ini dan menentukan cakupan jvm.memory
.
jvm.memory.used
adalah jumlah memori JVM yang digunakan, termasuk memori tumpukan yang digunakan dan digunakan mantan permGen dalam memori non-heap.jvm.memory.used
adalah refleksi utama dari perubahan memori tumpukan, karena bagian permGen sebelumnya biasanya stabil.Jika Anda menemukan
jvm.memory.used
terlalu besar, pertimbangkan untuk mengatur ukuran memori timbunan maksimum yang lebih kecil.jvm.memory.committed
adalah jumlah memori yang diterapkan untuk digunakan JVM. Ukuranjvm.memory.committed
pada dasarnya adalah batas memori JVM yang dapat digunakan.jvm.memory.max
adalah jumlah maksimum memori JVM, tidak dikacaukan dengan jumlah nyata yang tersedia.Nilai
jvm.memory.max
kadang-kadang dapat membingungkan karena bisa jauh lebih tinggi dari memori aplikasi yang tersedia. Untuk memperjelas,jvm.memory.max
adalah jumlah semua ukuran maksimum memori tumpukan dan bagian permGen sebelumnya dari memori non-tumpukan, terlepas dari memori yang tersedia secara nyata. Misalnya, jika aplikasi diatur dengan memori 1 GB di portal Azure Spring Apps, maka ukuran memori timbunan default adalah 0,5 GB. Untuk informasi selengkapnya, lihat bagian Ukuran timbunan maksimum default dari manajemen memori Java.Jika ukuran ruang kelas terkompresi default adalah 1 GB, maka nilainya lebih besar dari
jvm.memory.max
1,5 GB terlepas dari apakah ukuran memori aplikasi 1 GB. Untuk informasi selengkapnya, lihat Platform Java, Panduan Penyetelan Pengumpulan Sampah Komputer Virtual HotSpot Edisi Standar: Pertimbangan Lain dalam dokumentasi Oracle.
jvm.gc.memory.alocated/promoted
Kedua metrik ini untuk mengamati pengumpulan sampah Java (GC). Untuk informasi selengkapnya, lihat bagian pengumpulan sampah Java dari manajemen memori Java. Ukuran timbunan maksimum memengaruhi frekuensi GC kecil dan GC penuh. Metaspace maksimum dan ukuran memori langsung maksimum memengaruhi GC penuh. Jika Anda ingin menyesuaikan frekuensi pengumpulan sampah, pertimbangkan untuk memodifikasi ukuran memori maksimum berikut.
jvm.gc.memory.allocated
adalah jumlah peningkatan ukuran kumpulan memori generasi muda setelah satu GC dan sebelum yang berikutnya. Nilai ini mencerminkan GC kecil.jvm.gc.memory.promoted
adalah jumlah peningkatan ukuran kumpulan memori generasi lama setelah GC. Nilai ini mencerminkan GC penuh.
Anda dapat menemukan fitur ini di portal Azure, seperti yang ditunjukkan pada cuplikan layar berikut. Anda dapat memilih metrik tertentu dan menambahkan filter untuk aplikasi, penyebaran, atau instans tertentu. Anda juga dapat menerapkan pemisahan.
Penelusuran kesalahan lebih lanjut
Untuk penelusuran kesalahan lebih lanjut, Anda dapat mengambil heap dump dan thread dump secara manual, dan menggunakan Java Flight Recorder (JFR). Untuk informasi selengkapnya, lihat Mengambil heap dump dan thread dump secara manual dan menggunakan Java Flight Recorder di Azure Spring Apps.
Heap dump merekam status memori tumpukan Java. Pembuangan utas merekam tumpukan semua utas langsung. Alat-alat ini tersedia melalui Azure CLI dan di halaman aplikasi portal Azure, seperti yang ditunjukkan pada cuplikan layar berikut.
Untuk informasi selengkapnya, lihat Mengambil heap dump dan thread dump secara manual dan menggunakan Java Flight Recorder di Azure Spring Apps. Anda juga dapat menggunakan alat pihak ketiga seperti Memory Analyzer untuk menganalisis heap dump.
Mengubah konfigurasi untuk memperbaiki masalah
Beberapa masalah yang mungkin Anda identifikasi termasuk OOM kontainer, memori tumpukan yang terlalu besar, dan pengumpulan sampah yang tidak normal. Jika Anda mengidentifikasi salah satu masalah ini, Anda mungkin perlu mengonfigurasi ukuran memori maksimum dalam opsi JVM. Untuk informasi selengkapnya, lihat bagian Opsi JVM penting dari manajemen memori Java.
Anda dapat mengubah opsi JVM dengan menggunakan portal Azure atau Azure CLI.
Di portal Azure, navigasikan ke aplikasi Anda, lalu pilih Konfigurasi dari bagian Pengaturan di menu navigasi. Pada tab Pengaturan Umum, perbarui bidang opsi JVM, seperti yang diperlihatkan dalam cuplikan layar berikut: