All Products
Search
Document Center

Application Real-Time Monitoring Service:Diagnosis penggunaan CPU tinggi dengan profil hotspot CPU

Last Updated:Sep 11, 2026

Ketika penggunaan CPU melonjak di lingkungan produksi, mengidentifikasi metode yang bertanggung jawab hanya berdasarkan metrik saja bisa jadi sulit. Application Real-Time Monitoring Service (ARMS) secara terus-menerus memprofilkan thread CPU aktif dengan mengambil snapshot stack tingkat metode pada interval reguler. Snapshot tersebut diagregasikan menjadi flame graph dan statistik tingkat metode, sehingga dapat menunjukkan secara tepat jalur kode mana yang paling banyak mengonsumsi siklus CPU.

Penting

Mengaktifkan diagnostik CPU menambahkan beban sekitar 5% pada CPU. Pastikan instans Anda memiliki ruang kapasitas yang cukup sebelum mengaktifkannya.

Cara kerja flame graph

ARMS mengagregasikan snapshot stack hasil sampling menjadi flame graph yang menyandikan dua dimensi:

DimensionMeaningHow to read it
Width (X-axis)Proporsi waktu CPU total yang dikonsumsi oleh suatu metodeKotak yang lebih lebar = lebih banyak waktu CPU
Depth (Y-axis)Hierarki panggilan — bagian bawah adalah titik masuk, bagian atas adalah metode daunPerhatikan bagian atas graf untuk menemukan metode tempat siklus CPU benar-benar dihabiskan
Posisi horizontal tidak merepresentasikan progresi waktu. Dua metode yang ditempatkan bersebelahan belum tentu dijalankan secara berurutan.

Self time vs. total time

Dua metrik membantu Anda membedakan antara metode yang mahal secara individual dan metode yang berkontribusi terhadap penggunaan CPU tinggi melalui metode anaknya:

MetricDefinitionWhen to use
SelfWaktu atau sumber daya yang dikonsumsi oleh suatu metode dalam stack, tidak termasuk waktu atau sumber daya yang dikonsumsi oleh metode anakTemukan metode yang mahal secara individual
TotalWaktu atau sumber daya yang dikonsumsi oleh suatu metode, termasuk waktu atau sumber daya yang dikonsumsi oleh semua metode anakTemukan jalur panggilan yang paling banyak berkontribusi terhadap waktu CPU secara keseluruhan

Self time = Total time – jumlah Total time dari semua anak. Sebagai contoh, jika suatu metode menunjukkan Total 309 ms dan satu-satunya anaknya menunjukkan Total 112 ms, maka Self time metode induk tersebut adalah 197 ms (309 – 112).

Aktifkan diagnostik CPU

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

  2. Di halaman Application List, pilih wilayah di bilah navigasi atas lalu klik nama aplikasi.

    Ikon di kolom Language menunjukkan bahasa aplikasi: Java图标 Java image Go image Python Hyphen (-): aplikasi yang dipantau melalui Managed Service for OpenTelemetry.
  3. Di panel navigasi kiri, klik Application Settings. Klik tab Custom Configuration.

  4. Di bagian Continuous profiling, aktifkan Main switch dan CPU hotspot, lalu tentukan alamat IP instans aplikasi atau Blok CIDR untuk beberapa instans.

  5. Klik Save.

Perubahan berlaku langsung — tidak perlu restart aplikasi.

Identifikasi metode penyebab utama

Contoh berikut menggunakan metode Java yang melakukan busy-wait selama 500 milidetik untuk mensimulasikan konsumsi CPU yang berkelanjutan:

public class CPUPressure {

    // Loop busy-wait yang mempertahankan CPU selama 500 ms per pemanggilan
    public void runBusiness() {
        long start = System.currentTimeMillis(), period = 0;
        while (period <= 500L) {
            period = System.currentTimeMillis() - start;
        }
    }
}

Langkah 1: Buka tampilan profil

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

  2. Di halaman Application List, pilih wilayah di bilah navigasi atas lalu klik nama aplikasi.

    Ikon di kolom Language menunjukkan bahasa aplikasi: Java图标 Java image Go image Python Hyphen (-): aplikasi yang dipantau melalui Managed Service for OpenTelemetry.
  3. Di panel navigasi kiri, klik Continuous profiling. Pilih instans target dan rentang waktu.

  4. Di tab Single View, lakukan kueri data dan lihat hasil agregasi.

    Terdapat tiga jenis profil yang tersedia:

    • CPU Time: Core CPU yang dikonsumsi oleh setiap metode.

    • Allocated Memory: Byte memori yang dialokasikan.

    • Allocations: Jumlah panggilan alokasi memori — berguna untuk mengidentifikasi metode yang sering melakukan alokasi.

    Single view with aggregation analysis

Langkah 2: Temukan metode yang mahal

  1. Klik Aggregation & Analysis. Atur Profiling Type ke CPU Time. Panel kiri menampilkan daftar semua metode yang terlibat dalam stack panggilan hasil sampling. Panel kanan menampilkan flame graph.

    Aggregation & Analysis with CPU Time selected

  2. Urutkan kolom Self secara menaik. Cari dan klik metode dengan nilai Self terbesar. Dalam contoh ini, java.lang.System.currentTimeMillis() muncul di posisi paling atas. Mengkliknya akan menyorot kotak yang sesuai pada graf flame.

    Flame graph highlighting currentTimeMillis

  3. Konfirmasi di flame graph bahwa currentTimeMillis() memiliki kotak paling lebar di bagian atas stack, artinya metode tersebut mengonsumsi Self time atau sumber daya paling banyak.

Langkah 3: Lacak kembali ke kode aplikasi

Karena currentTimeMillis() merupakan metode library JDK, lihat satu level di bawahnya dalam call stack untuk menemukan metode aplikasi yang memanggilnya: com.alibaba.cloud.pressure.memory.CPUPressure.runBusiness().

Metode ini mengonsumsi 28,63 detik dalam rentang waktu 1 menit, menyumbang 91,44% dari total waktu CPU. Hal ini sesuai dengan perilaku yang diharapkan — runBusiness() melakukan busy-wait selama 500 ms pada setiap pemanggilan, sehingga mendominasi penggunaan CPU saat beban tinggi.

Topik terkait