All Products
Search
Document Center

Application Real-Time Monitoring Service:Analisis Pengecualian

Last Updated:Apr 02, 2026

Setelah Anda menginstal Agen ARMS untuk aplikasi Java, ARMS mulai memantau aplikasi tersebut. Di halaman Exceptions, Anda dapat menyaring dan menganalisis pengecualian berdasarkan nama pengecualian, nama API, atau host guna mengoptimalkan kode yang menghasilkannya.

Penting

Cara pencatatan pengecualian bekerja

ARMS mencatat suatu pengecualian setiap kali pengecualian tersebut lolos dari blok try-catch dalam metode yang diinstrumentasi. Pengecualian yang ditangkap dan ditangani di dalam blok try-catch tidak dicatat.

Skenario berikut menggambarkan perilaku ini. Asumsikan Agen ARMS telah menginstrumentasi kedua metode methodA dan methodB:

Kedua metode menangkap pengecualian

public int methodA() {
    try {
        return methodB();
    } catch (Throwable e) {
        e.printStackTrace();
        return 0;
    }
}

public int methodB() {
    try {
        return 1 / 0;
    } catch (Throwable e) {
        e.printStackTrace();
        return 0;
    }
}

Hasil: ARMS tidak mencatat pengecualian apa pun. Kedua pengecualian ditangkap dan ditangani di dalam blok try-catch masing-masing.

Hanya satu metode yang menangkap pengecualian

public int methodA() {
    try {
        return methodB();
    } catch (Throwable e) {
        e.printStackTrace();
        return 0;
    }
}

public int methodB() {
    return 1 / 0;
}

Hasil: ARMS mencatat satu pengecualian java.lang.ArithmeticException—tidak tertangkap di methodB.

Kedua metode tidak menangkap pengecualian

public int methodA() {
    return methodB();
}

public int methodB() {
    return 1 / 0;
}

Hasil: ARMS mencatat dua pengecualian java.lang.ArithmeticException—satu untuk setiap metode yang diinstrumentasi tempat pengecualian menyebar tanpa tertangkap.

Menangkap dan melempar ulang sebagai tipe pengecualian yang berbeda

public static int methodA() {
    try {
        return methodB();
    } catch (Throwable e) {
        throw new RuntimeException(e);
    }
}

public static int methodB() {
    return 1 / 0;
}

Hasil: ARMS mencatat dua pengecualian:

  • Satu pengecualian java.lang.ArithmeticException—tidak tertangkap di methodB

  • Satu pengecualian java.lang.RuntimeException—dilemparkan oleh methodA

Lihat analisis pengecualian

  1. Masuk ke Konsol ARMS. Di panel navigasi kiri, pilih Application Monitoring > Application List.

  2. Di bilah navigasi atas, pilih Scenario-based Analysis > Exceptions.

    image.png

    • Di bagian filter cepat (①), Anda dapat menyaring jumlah pengecualian dan daftar pengecualian berdasarkan Exception, API, atau Host.

    • Di bagian grafik tren (②), Anda dapat melihat jumlah pengecualian yang dilemparkan selama rentang waktu tertentu. Data ditumpuk berdasarkan jenis pengecualian.

      Klik ikon image.png untuk melihat statistik metrik untuk periode waktu tertentu atau untuk membandingkan statistik periode yang sama pada tanggal berbeda. Klik ikon image.png untuk beralih antara grafik batang dan grafik tren.

    • Di bagian daftar pengecualian (③), Anda dapat melihat nama API, jumlah pengecualian, persentase, serta ringkasan informasi pengecualian.

      Di daftar pengecualian, Anda dapat melakukan operasi berikut:

      • Klik Overview di kolom Actions untuk membuka panel di sebelah kanan. Panel tersebut menampilkan informasi seperti tren jumlah pengecualian, distribusi pengecualian di berbagai API dan instans, serta jejak stack.

        image.png

      • Klik Traces di kolom Actions untuk melihat detail jejak panggilan tersebut. Untuk informasi lebih lanjut, lihat Trace analysis.

Dokumentasi terkait

Untuk daftar lengkap metrik Application Monitoring, lihat Application Monitoring metrics.

FAQ

Jumlah pengecualian untuk suatu API melebihi jumlah permintaan

Hal ini dapat terjadi karena alasan berikut:

  • ARMS mencatat pengecualian saat dilemparkan oleh metode yang diinstrumentasi. Jika beberapa metode yang diinstrumentasi melemparkan pengecualian selama satu panggilan API, ARMS mencatat beberapa pengecualian untuk panggilan tersebut.

  • Jika pengecualian yang sama menyebar naik melalui stack metode melalui beberapa metode yang diinstrumentasi, ARMS mencatat pengecualian tersebut beberapa kali.

Data pengecualian berubah setelah upgrade agent

Versi agent yang berbeda dapat mengubah kumpulan metode yang diinstrumentasi. Ketika jumlah metode yang diinstrumentasi bertambah atau berkurang, jumlah pengecualian yang ditangkap juga berubah sesuai.

ARMS menampilkan pengecualian yang tidak ditangkap oleh logika bisnis

Pada banyak pustaka framework yang diinstrumentasi oleh agent, beberapa pengecualian ditangkap dan ditangani secara internal di tingkat framework dan tidak dilemparkan ke kode bisnis Anda. Agent menangkap pengecualian ini, tetapi aplikasi Anda tidak mengetahuinya.

Sebagai contoh, pemanggilan untuk mengakses MongoDB menggunakan MongoTemplate mungkin tidak melaporkan pengecualian di aplikasi Anda, tetapi Anda mungkin melihat pengecualian di Konsol ARMS. Hal ini karena MongoTemplate memiliki logika retry bawaan. Saat terjadi timeout, MongoTemplate mencoba ulang operasi tersebut dan hanya melemparkan pengecualian ke pemanggil setelah beberapa kali percobaan gagal. Oleh karena itu, jika Anda menggunakan MongoTemplate untuk mengakses MongoDB dan terjadi timeout serta retry di lapisan bawah, logika bisnis Anda mungkin tidak melihat pengecualian, tetapi Anda dapat melihat pengecualian di Konsol ARMS.

Jejak stack pengecualian tidak cocok

Untuk meningkatkan efisiensi pemrosesan dan pelaporan data, agent ARMS menghasilkan sidik jari untuk setiap pengecualian berdasarkan nama kelasnya, tiga baris pertama dari stack metode, dan tiga baris terakhir dari stack metode. Sidik jari ini kemudian dikodekan menjadi nilai 64-bit menggunakan CRC64. Saat pengecualian pertama kali terjadi, agent melaporkan nilai terkode dan nilai aslinya. Untuk pengecualian identik berikutnya, hanya nilai terkode yang dilaporkan. Hal ini dapat menyebabkan ketidaksesuaian antara jejak stack yang ditampilkan dengan jejak stack aktual dalam dua situasi:

  • Dua pengecualian memiliki stack metode lengkap yang berbeda tetapi memiliki nama kelas yang sama serta tiga baris pertama dan tiga baris terakhir stack metode yang sama. Logika pemrosesan ini menghasilkan nilai terkode yang identik, sehingga menyebabkan ketidaksesuaian.

  • Dua pengecualian memiliki nama kelas yang berbeda atau tiga baris pertama atau tiga baris terakhir stack metode yang berbeda, tetapi nilai terkode mereka sama. Hal ini dapat terjadi karena tabrakan hash dari algoritma pengkodean CRC64 yang tidak unik.

Jika salah satu situasi ini terjadi, Anda dapat menaikkan nilai parameter similar exception stack differentiation depth di bagian Exception Advanced Filtering Configuration pada halaman Custom Configurations.image

Pengecualian ditampilkan sebagai ID setelah 30 hari

Untuk mengoptimalkan volume data yang dilaporkan, ARMS mengkodekan suatu pengecualian dan melaporkan nilai terkode beserta nilai aslinya ke server saat pengecualian pertama kali terjadi. Server menyimpan pemetaan ini, yang kedaluwarsa setelah 30 hari. Jika suatu aplikasi berjalan lebih dari 30 hari, server mungkin tidak lagi dapat mencari nilai pengecualian asli dari nilai terkode tersebut.

Pengecualian tidak ditampilkan di konsol

Secara default, agent ARMS hanya mengumpulkan pengecualian dari metode yang diinstrumentasinya.

Jika Anda menggunakan agent versi 4.1.12 atau yang lebih baru, Anda dapat membuka halaman Custom Configurations dan mengaktifkan plugin pengecualian di bagian agent switch settings. Setelah Anda mengaktifkan plugin tersebut, ARMS mengumpulkan data setiap kali sebuah instans pengecualian dibuat.