All Products
Search
Document Center

Application Real-Time Monitoring Service:Gunakan fitur diagnostik kode untuk mendiagnosis jejak lambat pada aplikasi Java

Last Updated:Jun 27, 2025

Fitur diagnostik kode dari Application Real-Time Monitoring Service (ARMS) menggunakan teknologi profil berkelanjutan untuk secara berkala mengumpulkan snapshot tumpukan metode thread dan mensimulasikan eksekusi kode.

Skenario

  • Jika sebuah promosi mengalami panggilan lambat, fitur diagnostik kode dapat dengan cepat mengidentifikasi kode yang bermasalah.

  • Jika sistem mengalami banyak panggilan lambat, fitur ini dapat secara otomatis menyimpan kode yang bermasalah.

  • Jika bisnis Anda terlalu kompleks untuk mereproduksi panggilan lambat sesekali, fitur ini dapat mensimulasikan eksekusi kode dan panggilan metode.

  • Jika metode dan instrumentasi pada lapisan non-kerangka kerja hilang dari jejak, fitur ini membantu memulihkan waktu yang dikonsumsi oleh metode yang melibatkan instrumentasi.

Prasyarat

  • Agen ARMS adalah V3.1.4 atau lebih baru.

    • Sebelum V4.2.1: hanya mendukung panggilan sinkron. Panggilan asinkron dapat menyebabkan kehilangan data. Sebagai contoh, ketika Spring Cloud Gateway, Undertow, atau Lettuce digunakan, thread mungkin beralih secara asinkron, menyebabkan ketidakakuratan pengumpulan data.

    • V4.2.1 atau lebih baru: mendukung panggilan sinkron dan asinkron.

  • Sistem operasi kernel dan versi JDK memenuhi persyaratan. Fitur diagnostik kode bergantung pada fitur profil berkelanjutan.

Aktifkan fitur diagnostik kode

  1. Di panel navigasi sisi kiri, klik Application Settings. Pada halaman yang muncul, klik tab Custom Configuration.

  2. Di bagian Continuous profiling, aktifkan Sakelar Utama dan Hotspot Kode, lalu konfigurasikan alamat IP instance aplikasi atau blok CIDR dari beberapa instance.

  3. Di bagian bawah tab, klik Save.

    Modifikasi berlaku tanpa perlu me-restart aplikasi.

Lihat data kode hotspot di halaman Pemanggilan Antarmuka

Contoh: Mem-parsing dan menjelajahi data JSON serta memanggil antarmuka HTTP downstream.

public class HotSpotAction extends AbsAction {

  private RestTemplate restTemplate = new RestTemplate();
  
  // Metode permintaan.
  @Override
  public void runBusiness() {
    readFile();
    invokeAPI();
  }

  // Jalankan panggilan HTTP.
  private void invokeAPI() {
    String url = "https://httpbin.org/get";
    String response = restTemplate.getForObject(url, String.class);
  }

   // Baca dan parse data file.
  private double readFile() {
    InputStreamReader reader = new InputStreamReader(
        ClassLoader.getSystemResourceAsStream("data/xxx.json"));
    LinkedList<Movie> movieList = GSON.fromJson(reader, new TypeToken<LinkedList<Movie>>() {
    }.getType());
    double totalCount = 0;
    for (int i = 0; i < movieList.size(); i++) {
      totalCount += movieList.get(i).rating();
    }
    return totalCount;
  }
}
  1. Di panel navigasi sisi kiri, klik Pemanggilan Antarmuka. Pada halaman yang muncul, pilih antarmuka dan klik tab Snapshot Antarmuka.

  2. Di tab Snapshot Antarmuka, klik ID jejak.

  3. Klik ikon Pembesar di kolom Rincian lalu klik tab Hotspot Kode.

    image

    Sisi kiri gambar menunjukkan waktu yang dikonsumsi untuk semua metode yang terlibat, dan sisi kanan menunjukkan grafik api dari semua informasi tumpukan metode untuk setiap metode.

    • Kolom Self menampilkan waktu atau sumber daya yang dikonsumsi oleh setiap metode dalam tumpukan, tidak termasuk waktu atau sumber daya yang dikonsumsi oleh metode anak mereka. Data ini dapat digunakan untuk mengidentifikasi metode yang menghabiskan waktu atau sumber daya berlebihan.

    • Kolom Total menampilkan waktu atau sumber daya yang dikonsumsi oleh setiap metode, termasuk yang dikonsumsi untuk semua metode anaknya. Data ini dapat digunakan untuk mengidentifikasi metode yang memberikan kontribusi waktu atau sumber daya paling banyak.

    Saat Anda menganalisis logika kode, Anda dapat menemukan metode yang memakan waktu dengan fokus pada kolom Self atau api lebar di bagian bawah grafik api di sisi kanan. Secara umum, api lebar menunjukkan hambatan kinerja sistem. Metode java.lang.Thread.sleep() pada gambar sebelumnya mengonsumsi banyak waktu karena hambatan kinerja sistem.

    Berdasarkan gambar di atas, lakukan analisis berikut:

    1. Urutkan nilai di kolom Self secara menaik. Temukan dan klik metode java.util.LinkedList.node(int) dengan nilai terbesar. Metode terkait ditampilkan di grafik api.

      image

    2. Catat bahwa metode java.util.LinkedList.node(int) memiliki kotak terlebar di bagian atas tumpukan grafik api.

    3. Karena metode java.util.LinkedList.node(int) adalah fungsi pustaka Java Development Kit (JDK), jika Anda mencari lebih jauh ke atas, Anda akan menemukan metode java.util.LinkedList.get(int) dan metode induknya com.alibaba.cloud.pressure.memory.HotSpotAction.readFile(). Sebagai metode layanan pertama yang didefinisikan oleh aplikasi, metode com.alibaba.cloud.pressure.memory.HotSpotAction.readFile() mengonsumsi 3,75 detik, atau 69,88% dari tumpukan. Dengan demikian, Anda dapat menyimpulkan bahwa metode com.alibaba.cloud.pressure.memory.HotSpotAction.readFile() mengonsumsi banyak sumber daya dalam periode waktu tertentu. Anda dapat menggunakan metode yang dijelaskan di sini untuk menganalisis logika metode terkait dan memeriksa apakah mereka dapat dioptimalkan.

FAQ

  • Mengapa waktu yang dikonsumsi untuk kode lebih sedikit daripada waktu untuk permintaan?

    Untuk meminimalkan dampak fitur diagnostik kode pada kinerja aplikasi, kami telah mengoptimalkan pengumpulan data. Dengan cara ini, waktu yang ditampilkan lebih sedikit daripada waktu sebenarnya. Secara umum, deviasi tidak lebih dari 20 milidetik. Kami sarankan Anda mengabaikan deviasi nilai absolut dan fokus pada metode yang mengonsumsi waktu paling lama.

  • Apakah statistik diagnostik kode memiliki keterbatasan?

    • Untuk permintaan yang memakan waktu lebih dari 15 menit, fitur diagnostik kode hanya menyediakan data analisis untuk 15 menit pertama.

    • Untuk mengurangi overhead sistem, Pemantauan Aplikasi tidak mengumpulkan data kode dari permintaan yang memakan waktu kurang dari 500 milidetik. Oleh karena itu, data mungkin tidak ditampilkan di tab Kode Hotspot.

Referensi

Saat Anda menggunakan fitur profil berkelanjutan: