Code hotspot ARMS adalah alat pemantauan dan diagnostik yang menggunakan continuous profiling untuk mengambil snapshot tumpukan thread permintaan. Fitur ini memberikan tampilan eksekusi kode Anda yang akurat dan real-time guna membantu mengidentifikasi masalah kinerja.
Kasus penggunaan
-
Cepat mengidentifikasi kode bermasalah saat terjadi panggilan lambat selama acara bertrafik tinggi, seperti promosi penjualan.
-
Secara otomatis menyimpan konteks eksekusi ketika sistem mengalami volume tinggi panggilan lambat.
-
Merekonstruksi jalur eksekusi tingkat metode secara tepat untuk panggilan lambat yang kompleks atau intermiten yang sulit direproduksi.
-
Saat sebuah jejak tidak memiliki instrumentasi untuk metode non-framework, fitur code hotspot membantu menentukan waktu eksekusi aktual dari panggilan metode tersebut.
Prasyarat
-
Fitur code hotspot memerlukan versi agen 3.1.4 atau lebih baru.
-
Fitur code hotspot bergantung pada continuous profiling, yang memiliki persyaratan khusus terhadap kernel sistem operasi dan versi JDK. Untuk informasi selengkapnya, lihat Batasan. Pastikan Anda menggunakan sistem operasi dan JDK yang kompatibel.
-
Versi agen sebelum 4.2.1 hanya mendukung panggilan sinkron. Data dapat hilang untuk panggilan asinkron. Misalnya, jika Anda menggunakan Spring Cloud Gateway, Undertow, atau Lettuce, pergantian thread asinkron dapat menyebabkan ketidakakuratan pengumpulan data. Versi agen 4.2.1 dan yang lebih baru mendukung skenario asinkron.
Aktifkan code hotspot
-
Masuk ke ARMS console. Di panel navigasi kiri, pilih .
-
Di halaman Applications, pilih wilayah di bagian atas lalu klik nama aplikasi Anda.
CatatanIkon di kolom Language menunjukkan hal berikut:
: aplikasi Java yang terhubung ke Application Monitoring.
: aplikasi Go yang terhubung ke Application Monitoring.
: aplikasi Python yang terhubung ke Application Monitoring.-: aplikasi yang terhubung ke Trace Explorer (OpenTelemetry).
-
Di panel navigasi kiri, klik Application Settings, lalu klik tab Custom Configuration.
-
Di bagian Continuous profiling, aktifkan Main switch, lalu aktifkan sakelar Code Hotspot. Konfigurasikan alamat IP instans aplikasi atau Blok CIDR kelompok instans tempat Anda ingin mengaktifkan fitur ini.
-
Di bagian bawah halaman, klik Save.
Perubahan langsung berlaku tanpa perlu restart aplikasi.
Analisis data code hotspot
Contoh ini mengurai dan melakukan iterasi terhadap data JSON, lalu memanggil API HTTP downstream.
public class HotSpotAction extends AbsAction {
private RestTemplate restTemplate = new RestTemplate();
// Metode entri permintaan.
@Override
public void runBusiness() {
readFile();
invokeAPI();
}
// Lakukan panggilan HTTP.
private void invokeAPI() {
String url = "https://httpbin.org/get";
String response = restTemplate.getForObject(url, String.class);
}
// Baca dan urai 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;
}
}
-
Masuk ke ARMS console. Di panel navigasi kiri, pilih .
-
Di halaman Applications, pilih wilayah di bagian atas lalu klik nama aplikasi Anda.
CatatanIkon di kolom Language menunjukkan hal berikut:
: aplikasi Java yang terhubung ke Application Monitoring.
: aplikasi Go yang terhubung ke Application Monitoring.
: aplikasi Python yang terhubung ke Application Monitoring.-: aplikasi yang terhubung ke Managed Service for OpenTelemetry.
-
Di panel navigasi kiri, klik Interface Invocation. Di sisi kanan halaman, pilih antarmuka target lalu klik tab trace query.
-
Di tab trace query, klik tautan TraceId target.
-
Di kolom Details, klik ikon kaca pembesar lalu klik tab Code Hotspot.
Panel kiri mencantumkan semua metode yang terlibat dalam panggilan ini beserta waktu eksekusinya. Panel kanan menampilkan graf nyala (flame graph) yang memvisualisasikan tumpukan jejak (stack traces) untuk metode yang dipilih.
-
Kolom Self menunjukkan waktu atau sumber daya yang dikonsumsi oleh suatu metode dalam eksekusinya sendiri, tidak termasuk waktu atau sumber daya yang dikonsumsi oleh metode anaknya. Hal ini membantu mengidentifikasi metode yang menghabiskan banyak waktu dalam logikanya sendiri.
-
Kolom Total menunjukkan waktu atau sumber daya yang dikonsumsi oleh suatu metode beserta semua metode anaknya. Hal ini membantu memahami metode mana yang paling berkontribusi terhadap waktu eksekusi keseluruhan dari tumpukan panggilan.
Untuk mengidentifikasi code hotspot spesifik, fokuslah pada kolom Self atau carilah batang lebar di bagian bawah graf nyala. Batang lebar menunjukkan akar penyebab latensi tinggi dan sering kali merepresentasikan bottleneck kinerja sistem, seperti metode java.lang.Thread.sleep().
Analisis data sebagai berikut:
-
Urutkan kolom Self secara menurun. Klik metode dengan nilai Self tertinggi, misalnya java.util.LinkedList.node(int). Graf nyala di sebelah kanan akan memfokuskan pada metode yang relevan.
-
Tampilan terfokus menunjukkan bahwa java.util.LinkedList.node(int) merupakan batang paling lebar di bagian atas tumpukan dalam graf nyala.
-
Metode ini merupakan fungsi pustaka dari Java Development Kit (JDK), bukan logika bisnis aplikasi Anda. Untuk menemukan sumbernya dalam kode Anda, lacak tumpukan panggilan ke atas dari java.util.LinkedList.node(int). Metode tersebut dipanggil oleh java.util.LinkedList.get(int), yang selanjutnya dipanggil oleh com.alibaba.cloud.pressure.memory.HotSpotAction.readFile(). Metode com.alibaba.cloud.pressure.memory.HotSpotAction.readFile() merupakan bagian dari aplikasi Anda. Dalam contoh ini, metode tersebut mengonsumsi waktu 3,75 detik, yang setara dengan 69,88% dari total waktu dalam graf nyala. Hal ini menunjukkan bahwa com.alibaba.cloud.pressure.memory.HotSpotAction.readFile() merupakan bottleneck kinerja signifikan. Analisis logika metode ini untuk mengidentifikasi peluang optimasi.
-
FAQ
-
Mengapa durasi yang ditampilkan di code hotspot lebih pendek daripada durasi total permintaan?
Untuk meminimalkan dampak kinerja pada aplikasi Anda, fitur code hotspot menggunakan mekanisme pengumpulan yang dioptimalkan. Hal ini dapat menyebabkan durasi yang terekam sedikit lebih pendek daripada durasi permintaan aktual. Penyimpangan biasanya dalam kisaran 20 ms. Abaikan perbedaan kecil ini dan fokuslah pada metode dengan durasi relatif tertinggi.
-
Apakah ada batasan pada cakupan pengumpulan data untuk code hotspot?
-
Untuk permintaan yang berlangsung lebih dari 15 menit, fitur code hotspot hanya menyediakan data analisis untuk 15 menit pertama.
-
Untuk mengurangi beban sistem, ARMS tidak mengumpulkan data code hotspot untuk permintaan berlatensi rendah. Permintaan ini biasanya selesai dalam waktu kurang dari 500 ms, meskipun ambang batas pastinya ditentukan secara dinamis berdasarkan beban sistem. Akibatnya, tab mungkin tidak menampilkan data apa pun untuk permintaan tersebut.
-
Topik terkait
Anda dapat menggunakan fitur continuous profiling untuk memecahkan masalah penggunaan CPU dan memori yang tinggi. Untuk informasi selengkapnya, lihat topik berikut:
-
Gunakan profil hotspot CPU untuk mendiagnosis penggunaan CPU tinggi
-
Gunakan profil hotspot memori untuk mendiagnosis penggunaan memori heap tinggi
Untuk masalah umum terkait continuous profiling, lihat FAQ.