Bagikan melalui


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.

Cuplikan layar portal Azure memperlihatkan halaman Azure Spring Apps Resource Health dengan pesan OOM disorot.

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.

Cuplikan layar portal Azure memperlihatkan halaman Mendiagnosis dan memecahkan masalah azure Spring Apps dengan Penggunaan Memori yang disorot di menu drop-down.

Penggunaan Memori menyediakan diagnosis sederhana untuk penggunaan memori aplikasi, seperti yang ditunjukkan pada cuplikan layar berikut.

Cuplikan layar portal Azure memperlihatkan halaman Penggunaan Memori Azure Spring Apps.

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.committeddan 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. Ukuran jvm.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.

Cuplikan layar portal Azure memperlihatkan halaman Metrik Azure Spring Apps.

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.

Cuplikan layar portal Azure memperlihatkan halaman gambaran umum aplikasi dengan tombol Pemecahan Masalah disorot.

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:

Cuplikan layar portal Azure memperlihatkan halaman konfigurasi aplikasi dengan opsi JVM disorot.

Lihat juga