Fitur pemantauan JVM dari Application Real-Time Monitoring Service (ARMS) Application Monitoring menyediakan visualisasi berbagai metrik memori selama periode waktu tertentu. Meskipun grafik ini menunjukkan pola penggunaan memori yang tinggi, mereka tidak memberikan informasi rinci yang diperlukan untuk mendiagnosis masalah spesifik seperti kebocoran atau pembengkakan memori. Untuk itu, disarankan untuk menghasilkan snapshot memori dan menganalisis data penggunaan memori terperinci dalam log.
Prasyarat
ARMS agent untuk Java V2.7.1.2 atau lebih baru, dirilis setelah 24 September 2021, telah diinstal.
Sistem operasi Linux digunakan. Hanya server Linux yang mendukung snapshot memori.
Pengguna Resource Access Management (RAM) memiliki izin AliyunARMSFullAccess.
Keterbatasan
Fitur snapshot memori dikembangkan berdasarkan heap dump bawaan JVM (jmap -dump:all). Heap dump dapat memerlukan memori tambahan dan memicu safe points serta GC yang menangguhkan semua thread non-JVM. Akibatnya, aplikasi akan ditangguhkan, dan penangguhan ini tidak dapat diinterupsi. Oleh karena itu, penting untuk mengevaluasi risiko sebelum mengaktifkan fitur ini di lingkungan produksi.
Fitur snapshot memori memiliki keterbatasan dependensi berikut:
ARMS agent V2.7.3.5 dan versi sebelumnya tidak mendukung JRE, Java 11, atau Alpine Linux, serta bergantung pada variabel lingkungan JAVA_HOME dan file JAVA_HOME/lib/tools.jar.
ARMS agent V2.8.3 hingga V3.2.8 mendukung JRE, Java 8, Java 11, dan Alpine Linux, serta bergantung pada variabel lingkungan JAVA_HOME dan perintah Java. Anda harus menambahkan
$JAVA_HOME/binke variabel lingkungan PATH.Pada ARMS agent V3.2.9 dan versi lebih baru, fitur snapshot memori dioptimalkan secara signifikan. Anda tidak perlu menambahkan
$JAVA_HOME/binke variabel lingkungan PATH. Oleh karena itu, disarankan untuk memperbarui ARMS agent ke versi ini. Untuk informasi lebih lanjut tentang pembaruan, lihat Perbarui ARMS Agent.
Jika jaringan VPC tempat aplikasi diterapkan memiliki batasan jumlah Bucket Object Storage Service (OSS) yang dapat diakses, Anda harus menambahkan bucket penyimpanan snapshot memori ke kebijakan yang sesuai. Format bucket: arms-heapdump-<regionId>. Ganti <regionId> dengan ID wilayah. Misalnya, jika aplikasi diterapkan di wilayah China (Hangzhou), nama bucket adalah arms-heapdump-cn-hangzhou.
CatatanFitur snapshot memori mengunggah data snapshot yang dikumpulkan oleh instance aplikasi ke bucket OSS yang ditentukan untuk penyimpanan dan pemrosesan. Jika bucket OSS tidak ditentukan dalam kebijakan, data tidak dapat dikumpulkan sesuai harapan.
Sebelumnya, snapshot historis memiliki periode retensi tanpa batas. Namun, mulai 1 Juli 2023, ARMS memberlakukan batas 90 hari pada periode retensi snapshot historis. Untuk menghindari kehilangan data, disarankan untuk mencadangkan snapshot secara teratur.
Buat snapshot memori
Di panel navigasi sisi kiri, klik Application Details. Pada halaman yang muncul, klik tab JVM monitoring.
Di sudut kanan atas tab JVM monitoring, klik Create Memory Snapshot.
Dalam kotak dialog Create Memory Snapshot, pilih alamat IP dan klik Save.
CatatanJika Anda telah memilih instance di pohon navigasi sisi kiri halaman Application Details, alamat IP instance tersebut akan dipilih secara otomatis dari daftar drop-down IP.
Dalam pesan yang muncul, klik Force to dump.
PentingDurasi tugas snapshot memori bervariasi dari beberapa menit hingga sekitar setengah jam. Saat Anda memaksa dump, proses aplikasi akan berhenti merespons, jadi lanjutkan dengan hati-hati.
Lihat detail snapshot memori
Di sudut kanan atas tab JVM monitoring, klik Historical Snapshots.
Panel Number of Snapshot Jobs menampilkan status eksekusi tugas. Hijau menunjukkan tugas berhasil, biru menunjukkan sedang dieksekusi, dan merah menunjukkan gagal. Temukan tugas dan klik Details untuk melihat kemajuan tugas.
Temukan tugas dan klik Analysis untuk melihat hasil analisis di konsol Application Troubleshooting Platform (ATP).
FAQ
Mengapa snapshot tidak dapat dibuat dan dianalisis secara otomatis sebelum aplikasi mengalami kesalahan OOM?
Saat aplikasi mendekati kondisi kehabisan memori (OOM), sumber daya sistem sering kali sangat terbatas. Membuat snapshot—operasi yang intensif sumber daya—selama periode ini dapat memicu kesalahan OOM. Untuk membuat dan menganalisis snapshot dengan aman, ikuti langkah-langkah berikut:
Konfigurasikan parameter berikut untuk aplikasi Anda. Saat terjadi kesalahan OOM, JVM secara otomatis membuat snapshot memori di
/tmp/heap.bin.Dalam lingkungan Kubernetes, petakan jalur
/tmp/heap.binke volume penyimpanan eksternal untuk mencegah hilangnya file akibat restart pod.-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap.binUnggah snapshot memori ke instance OSS. Untuk informasi lebih lanjut, lihat Mulai dengan OSS.
Gunakan platform ATP untuk menganalisis snapshot memori.