Bagikan melalui


Masalah mulai ulang aplikasi yang disebabkan oleh masalah di luar 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 masalah di luar memori (OOM) untuk aplikasi Java di Azure Spring Apps.

Jenis masalah di luar memori

Ada dua jenis masalah di luar memori: OOM kontainer dan OOM JVM.

  • OOM kontainer, juga disebut OOM sistem, terjadi ketika memori aplikasi yang tersedia telah habis. Masalah OOM kontainer menyebabkan peristiwa mulai ulang aplikasi, yang dilaporkan di bagian Kesehatan Sumber Daya portal Azure. Biasanya, OOM kontainer disebabkan oleh konfigurasi ukuran memori yang salah.

  • JVM OOM terjadi ketika jumlah memori yang digunakan telah mencapai ukuran maksimum yang diatur dalam opsi JVM. JVM OOM tidak akan menyebabkan aplikasi dimulai ulang. Biasanya, JVM OOM adalah hasil dari kode buruk, yang dapat Anda temukan dengan mencari java.lang.OutOfMemoryError pengecualian dalam log aplikasi. JVM OOM memiliki efek negatif pada aplikasi dan alat Java Profiling, seperti Java Flight Recorder.

Artikel ini berfokus pada cara memperbaiki masalah OOM kontainer. Untuk memperbaiki masalah OOM JVM, periksa alat seperti heap dump, thread dump, dan Java Flight Recorder. Untuk informasi selengkapnya, lihat Mengambil heap dump dan thread dump secara manual dan menggunakan Java Flight Recorder di Azure Spring Apps.

Memperbaiki masalah mulai ulang aplikasi karena OOM

Bagian berikut menjelaskan alat, metrik, dan opsi JVM yang dapat Anda gunakan untuk mendiagnosis dan memperbaiki masalah OOM kontainer.

Menampilkan pemberitahuan di halaman Kesehatan sumber daya

Halaman Kesehatan sumber daya pada portal Azure menampilkan peristiwa mulai ulang aplikasi karena OOM kontainer, seperti yang ditunjukkan pada cuplikan layar berikut:

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

Mengonfigurasi ukuran memori

Metrik Penggunaan memori aplikasi, jvm.memory.used, dan jvm.memory.committed memberikan tampilan penggunaan memori. Untuk informasi selengkapnya, lihat bagian Metrik Alat untuk memecahkan masalah memori. Konfigurasikan ukuran memori maksimum dalam opsi JVM untuk memastikan bahwa memori berada di bawah batas.

Jumlah ukuran memori maksimum semua bagian dalam model memori Java harus kurang dari memori aplikasi yang tersedia secara nyata. Untuk mengatur ukuran memori maksimum Anda, lihat tata letak memori umum yang dijelaskan di bagian Tata letak penggunaan memori manajemen memori Java.

Temukan keseimbangan saat Anda mengatur ukuran memori maksimum. Ketika Anda mengatur ukuran memori maksimum terlalu tinggi, ada risiko OOM kontainer. Ketika Anda mengatur ukuran memori maksimum terlalu rendah, ada risiko OOM JVM, dan pengumpulan sampah akan menjadi dan akan memperlambat aplikasi.

Mengontrol memori timbunan

Anda dapat mengatur ukuran timbunan maksimum dengan menggunakan -Xmsopsi , , -XX:InitialRAMPercentage-Xmx, dan -XX:MaxRAMPercentage JVM.

Anda mungkin perlu menyesuaikan pengaturan ukuran timbunan jvm.memory.used maksimum ketika nilai terlalu tinggi dalam metrik. Untuk informasi selengkapnya, lihat bagian jvm.memory.used/committed/max Alat untuk memecahkan masalah memori.

Mengontrol memori langsung

Penting untuk mengatur -XX:MaxDirectMemorySize opsi JVM karena alasan berikut:

  • Anda mungkin tidak melihat kapan kerangka kerja seperti nio dan gzip menggunakan memori langsung.
  • Pengumpulan sampah memori langsung hanya ditangani selama pengumpulan sampah penuh, dan pengumpulan sampah penuh hanya terjadi ketika tumpukan hampir penuh.

Biasanya, Anda dapat mengatur MaxDirectMemorySize ke nilai yang kurang dari ukuran memori aplikasi dikurangi memori tumpukan dikurangi memori non-tumpukan.

Mengontrol metaspace

Anda dapat mengatur ukuran metaspace maksimum dengan mengatur -XX:MaxMetaspaceSize opsi JVM. Opsi -XX:MetaspaceSize mengatur nilai ambang batas untuk memicu pengumpulan sampah penuh.

Memori metaspace biasanya stabil.

Lihat juga