All Products
Search
Document Center

Application Real-Time Monitoring Service:FAQ

Last Updated:Aug 05, 2026

Topik ini menjawab pertanyaan umum tentang penggunaan continuous profiling.

Mengaktifkan Continuous Profiling tidak menghasilkan data

  1. Periksa apakah konfigurasi Anda sudah benar. Pastikan bahwa Blok CIDR yang dikonfigurasi mencakup alamat IP instans aplikasi.

  2. Jika Anda menggunakan versi agent sebelum 3.1.4, mesin profiling mungkin gagal karena masalah kompatibilitas dengan image dasar Alpine. Masalah ini telah diperbaiki di versi 3.1.4. Untuk memastikan stabilitas dan integritas data, kami menyarankan Anda untuk upgrade agent ke versi 3.1.4 atau yang lebih baru.

    Catatan

    Untuk memeriksa apakah Anda menggunakan image dasar Alpine Linux, lihat Operasi lainnya.

  3. Continuous profiling menggunakan Async Profiler open source yang ditingkatkan untuk pengumpulan data dan tidak mendukung pemasangan beberapa Async Profiler secara bersamaan. Jika aplikasi Anda juga menggunakan fitur continuous profiling dari agent Pyroscope, aplikasi Anda mungkin gagal dimulai.

  4. Pada halaman continuous profiling, atur waktu kueri 8 jam lebih awal dan periksa apakah data muncul. Jika data ditampilkan, zona waktu aplikasi mungkin diatur ke UTC+0, sehingga menyebabkan penundaan penulisan data selama 8 jam dibandingkan dengan UTC+8.

    Solusi: Tambahkan variabel lingkungan ke aplikasi untuk menyesuaikan zona waktu ke UTC+8.

    Catatan

    Pertama, filter berdasarkan nama pod saat ini pada halaman continuous profiling untuk menghindari kebingungan akibat beberapa restart kontainer dalam 8 jam terakhir.

    Key: JAVA_TOOL_OPTIONS, Value: -Duser.timezone=GMT+8

    Masalah ini telah diperbaiki di versi agent 4.1.10. Jika Anda memastikan ini adalah penyebabnya, Anda juga dapat upgrade agent ke versi 4.1.10 atau yang lebih baru.

  5. Periksa apakah aplikasi telah memasang library dinamis Async Profiler lainnya:

    1. Jalankan perintah berikut. Ganti [pid] dengan ID proses aplikasi Anda.

      lsof -p [pid] | grep libasync
    2. Jika hasilnya berisi library dinamis non-Alibaba Cloud, seperti yang ditunjukkan di bawah ini, aplikasi Anda menggunakan library dinamis Async Profiler sendiri. Library ini tidak kompatibel dengan Application Real-Time Monitoring Service (ARMS). Untuk menggunakan fitur ARMS, Anda harus menghapus library dinamis tersebut.

      /home/admin/xxx/.default/temp/libasyncProfiler1309163652530490111.so

Mengapa biaya penyimpanan berubah untuk continuous performance profiling yang baru?

Berikut adalah alasan utama perubahan volume yang dilaporkan:

  • Continuous performance profiling adalah fitur baru yang sepenuhnya kompatibel dengan fitur continuous profiling asli. Fitur ini mendukung kueri agregat lintas beberapa instans, analisis tingkat thread, dan analisis graf flame cerdas dengan Copilot.

  • Struktur penyimpanan telah berubah. Untuk memungkinkan pengguna melakukan analisis sekunder terhadap data profiling, media penyimpanan dipindahkan dari Object Storage Service (OSS) bawaan ke instans Simple Log Service (SLS) di akun Anda. Proyek SLS adalah `proj-xtrace-<encode>-<region-id>`, dan penyimpanan log SLS adalah `logstore-profiling`. Perubahan ini memengaruhi volume data profiling yang disimpan dan biaya penyimpanan yang sesuai.

Rentang waktu yang didukung untuk kueri data

Data continuous performance profiling disimpan selama 7 hari. Anda dapat mengkueri data dalam periode ini.

Apakah wajar jika penggunaan memori dari pemantauan heap memory berbeda dengan penggunaan memori yang terdeteksi oleh memory hot spots dalam continuous profiling?

Continuous Profiling hanya mencatat alokasi memori heap dalam periode waktu tertentu, bukan total penggunaan memori proses.

Diagnostik CPU memiliki data tetapi diagnostik memori tidak memiliki data

Masalah ini biasanya terjadi pada versi agent 3.1.4 dan yang lebih baru.

Kurangnya data dalam diagnostik memori biasanya karena Anda menggunakan image dasar Alpine. Image dasar Alpine menghapus simbol debug JDK untuk mengurangi ukurannya, sehingga continuous profiling tidak dapat bekerja dengan benar. Untuk mengatasi masalah ini, Anda dapat menginstal simbol debug JDK dalam image Anda atau menggunakan image dasar non-Alpine. Perhatikan bahwa beberapa versi JDK tidak memiliki paket simbol debug yang sesuai, sehingga instalasi mungkin gagal.

Catatan

Untuk memverifikasi apakah JDK di lingkungan Anda berisi simbol debug, lihat Periksa apakah JDK di lingkungan Anda mencakup simbol debug.

Mengapa tidak ada data untuk code hot spots, atau mengapa datanya tidak sesuai ekspektasi?

  1. Profiling hot spot tidak didukung untuk aplikasi yang menggunakan virtual threads atau teknologi serupa di JDK, termasuk Alibaba Dragonwell JDK.

  2. Fitur code hot spot tidak didukung oleh protokol SkyWalking. Anda dapat mengonfirmasi jenis protokol di detail span suatu trace.

  3. Fitur code hot spot memerlukan versi agent 3.1.4 atau yang lebih baru. Versi sebelumnya tidak mendukung fitur ini.

  4. Versi agent sebelum 4.2.1 hanya mendukung panggilan sinkron dan mungkin tidak mengumpulkan data secara lengkap. Data mungkin hilang untuk panggilan asinkron. Misalnya, penggunaan Spring Cloud Gateway, Undertow, atau Lettuce dapat menyebabkan pergantian thread asinkron, yang mengakibatkan pengumpulan data tidak akurat. Versi agent 4.2.1 dan yang lebih baru mencakup optimasi untuk masalah ini. Kami menyarankan Anda untuk upgrade agent ke versi terbaru.

  5. Fitur code hot spot hanya didukung untuk trace yang diambil sampelnya dengan laju tetap. Fitur ini tidak didukung untuk trace yang dikumpulkan dengan laju pengambilan sampel non-tetap, seperti pengambilan sampel error (s9) atau pengambilan sampel lambat (s10), karena akan menyebabkan overhead performa yang tinggi. Jenis pengambilan sampel ini hanya dipicu setelah trace selesai. Anda dapat memeriksa bidang sample.reason di atribut span untuk menentukan jenis pengambilan sampel.

    Untuk trace yang dikumpulkan dengan laju pengambilan sampel non-tetap, buka halaman Trace Analysis. Gunakan parameter Traces with Code Hotspots untuk memfilter trace yang berisi code hot spots guna mendiagnosis masalah.

  6. Jika Anda menggunakan versi agent 4.2.1 atau yang lebih baru, waktu eksekusi yang dikumpulkan mungkin jauh lebih rendah daripada waktu yang dicatat oleh span luar. Hal ini dapat terjadi jika aplikasi Anda menggunakan framework I/O asinkron non-blocking (NIO), seperti Spring Cloud Gateway. Saat framework ini menerima permintaan dari layanan hulu atau mengirim permintaan ke layanan hilir, thread tidak diblokir jika data belum siap. Sebaliknya, thread segera kembali dan dapat melakukan tugas lain, yang meningkatkan pemanfaatan thread. Karena thread tidak diblokir menunggu I/O, bottleneck performa tidak berada di aplikasi saat ini. Dalam kasus ini, waktu yang dikumpulkan untuk code hot spot bisa jauh lebih rendah daripada durasi span. Anda harus memeriksa bottleneck dalam pemrosesan permintaan aplikasi hulu atau hilir, atau di jaringan.

Berapa overhead performa dari continuous profiling?

  • Uji performa menunjukkan overhead berikut untuk continuous profiling: Dalam skenario dengan 500 Transaksi Per Detik (TPS) dan semua fitur diaktifkan pada aplikasi Spring Web standar, overhead CPU meningkat sekitar 5% dan overhead memori off-heap meningkat sekitar 50 MB. Peningkatan dalam garbage collection (GC) dan latensi permintaan tidak signifikan.

  • Dalam kasus ekstrem, profiling memory hot spot tidak memiliki batas laju. Jika aplikasi mengalokasikan memori sangat sering, hal ini dapat menghasilkan volume event yang tinggi, seperti puluhan ribu per menit. Hal ini dapat memengaruhi latensi P99. Anda dapat menonaktifkan profiling memori untuk mengatasi masalah ini.

    Masalah ini telah diperbaiki di versi 4.1.10. Anda dapat upgrade agent ke versi 4.1.10 atau yang lebih baru.

Thread terkait JFR dalam aplikasi

  • Fitur continuous profiling membuat thread JDK Flight Recorder (JFR). Thread ini terutama ditemukan pada versi agent sebelum 4.1.10. Versi agent 4.1.10 dan yang lebih baru tidak membuat thread JFR.

  • Thread ini tidak menyebabkan bottleneck performa dalam aplikasi.

  • Jika Anda menonaktifkan sakelar continuous profiling secara dinamis, thread tidak langsung dihapus. Thread tersebut hanya hilang setelah aplikasi direstart.

Continuous profiling untuk waktu startup aplikasi

Continuous profiling dapat memperlambat startup aplikasi. Hal ini dapat terjadi jika JDK tidak memiliki simbol debug dan Classloader memuat banyak metode. Setelah aplikasi dimulai, tidak ada dampak pada performa runtime-nya.

Masalah ini telah diperbaiki di versi agent 4.2.1. Anda dapat upgrade agent ke versi ini untuk mengatasi masalah tersebut.

Mengapa total memori dalam graf flame melebihi batas memori yang dikonfigurasi sebenarnya?

Data dalam continuous profiling tidak secara langsung terkait dengan konfigurasi memori host. Data tersebut menunjukkan jumlah total memori heap yang dialokasikan selama periode analisis. Karena adanya garbage collection, wajar jika jumlah ini lebih besar daripada memori yang dikonfigurasi pada host.

Kegagalan attachment OpenJ9 JDK

Continuous profiling ARMS tidak mendukung IBM OpenJ9. Penggunaan JDK ini dapat menyebabkan kegagalan integrasi dan menghasilkan error. Kami menyarankan Anda menggunakan OpenJDK atau Oracle JDK sebagai gantinya.

Data code hot spot dalam span tidak lengkap

Code hot spots diidentifikasi dengan mengambil sampel stack metode thread dalam trace pada interval tertentu. Jika suatu metode tidak muncul dalam graf flame code hot spot, kemungkinan waktu eksekusinya kurang dari 500 ms. Metode dengan waktu eksekusi sesingkat itu mungkin tidak tertangkap oleh proses pengambilan sampel. Hal ini tidak memengaruhi diagnosis trace lambat karena metode berjalan singkat tidak dianggap sebagai bottleneck performa.

Mengapa graf flame berisi stack .GC_active?

.GC_active menunjukkan bahwa garbage collection (GC) aktif selama pengumpulan data untuk graf flame. Proses GC menjeda semua thread bisnis Java dalam event yang dikenal sebagai "Stop-the-World". Jika .GC_active muncul dalam code hot spot, artinya jeda GC berkontribusi terhadap latensi permintaan.

Mengapa graf flame berisi entri "unknown"?

Pada sistem operasi Alpine, jika JDK tidak memiliki simbol debug dan classloader memuat banyak metode, mengaktifkan continuous profiling dapat memperlambat aplikasi atau menyebabkannya timeout. Untuk mencegah hal ini, versi agent 4.2.1 dan yang lebih baru memantau waktu pemuatan. Ambang batas default adalah 150 ms. Jika pemuatan melebihi waktu ini, agent akan menghentikan beberapa langkah yang memakan waktu. Hal ini dapat mencegah beberapa simbol metode diurai dengan benar, sehingga menghasilkan entri "unknown". Anda dapat menyesuaikan ambang batas ini untuk mengurangi masalah ini. Misalnya, atur variabel lingkungan `AP_JMID_TIME_LIMIT` ke 500 (milidetik): `export AP_JMID_TIME_LIMIT=500`.

Mengapa graf flame berisi entri .no_Java_frame?

Hal ini biasanya terjadi saat Anda menggunakan image dasar Alpine. Alpine menghapus simbol debug JDK untuk mengurangi ukuran image. Hal ini mencegah sistem mengidentifikasi nama fungsi dalam stack metode thread C++ di dalam JDK. Stack ini kemudian ditampilkan sebagai .no_Java_frame. Stack ini sebagian besar merepresentasikan informasi thread non-Java, seperti dari VM Thread atau thread Just-In-Time (JIT) compiler. Jika proporsi entri .no_Java_frame rendah, Anda dapat mengabaikannya. Fokuslah pada stack metode Java lainnya untuk analisis performa. Jika proporsinya tinggi, instal simbol debug untuk JDK di image dasar Anda. Atau, beralihlah ke image dasar non-Alpine. Perhatikan bahwa beberapa versi JDK tidak memiliki paket simbol debug yang sesuai, sehingga instalasi mungkin gagal.

Mengapa item "other" muncul dalam graf flame?

Permasalahan

Item "other" muncul dalam graf flame. Misalnya, dalam hasil analisis dengan Allocated Memory yang dipilih sebagai jenis profiling, item other (6,41 MB) disorot dalam warna oranye pada tabel peringkat alokasi memori, ditempatkan di antara metode Java spesifik (seperti AbstractQueuedSynchronizer$ConditionObject.addConditionWaiter() 8,99 MB dan java.util.Arrays.copyOfRange(char[], int, int) 8,90 MB). Graf flame di sebelah kanan menampilkan hierarki call stack yang sesuai.

Penyebab

Item "other" dalam graf flame adalah hal yang normal. Graf flame memiliki struktur pohon. Ketika terdapat terlalu banyak node, sulit untuk mengidentifikasi informasi penting. ARMS menggabungkan node yang kurang signifikan ke dalam kategori "other" untuk menyederhanakan graf dan menyoroti informasi penting.

Output log: parse lib sigsegv handler installed

Agent ARMS mencetak pesan log informasional ini. Pesan ini hanya muncul setelah Anda mengaktifkan continuous profiling dan tidak memengaruhi performa runtime aplikasi. ARMS akan menonaktifkan output log ini di versi mendatang.

Bagaimana cara mengatasi error "No access to perf events" yang disebabkan oleh pembatasan perf_event_open?

Permasalahan

Async-Profiler bergantung pada pemanggilan sistem perf_event_open untuk profiling CPU. Namun, kebijakan keamanan di kernel Linux, seperti seccomp, dapat memblokir proses dari menggunakan pemanggilan sistem tertentu.

Pesan error sebagai berikut:

[ERROR] Failed to execute 'start,jfr=0,event=cpu,interval=11ms,alloc=512k,file=/tmp/cpc-async-profiler-7729534006755968198.jfr'
[ERROR] Failed to start Continuous Profile Collector
java.lang.RuntimeException: java.lang.IllegalStateException: No access to perf events. Try --fdtransfer or --all-user option or 'sysctl kernel.perf_event_paranoid=1'

Solusi

  • Untuk lingkungan Docker, jalankan kontainer dengan perintah berikut. Untuk kontrol lebih rinci atas pemanggilan sistem, lihat dokumentasi resmi.

      docker run --security-opt seccomp=unconfined  XXX
  • Untuk lingkungan Kubernetes, atur parameter privileged container menjadi privileged: true. Kontainer privileged selalu Unconfined.

    Untuk kontrol lebih rinci atas pemanggilan sistem, lihat dokumentasi resmi.

Bagaimana cara mengatasi error "No AllocTracer symbols found. Are JDK debug symbols installed?"?

Error ini, atau kurangnya data, dapat terjadi jika proses Java Anda berjalan dalam kontainer yang menggunakan image dasar Alpine. Image dasar Alpine menghapus simbol debug JDK untuk mengurangi ukurannya, sehingga continuous profiling tidak dapat bekerja dengan benar. Untuk mengatasi masalah ini, lihat solusi untuk kegagalan pengumpulan memory hot spot akibat simbol debug yang hilang.

Bagaimana cara mengatasi error "perf_event mmap failed..."?

Permasalahan

Error ini biasanya muncul dalam output standar Java Virtual Machine (JVM). Saat continuous profiling mengambil sampel CPU hot spots, ia mengumpulkan stack native (Linux Kernel, JVM, dan C/C++) dan stack Java. Untuk mengumpulkan stack native, ia harus melakukan memory map (MMap) pada file descriptor perf_event untuk setiap thread Java. Kernel Linux membatasi total memori untuk operasi MMap ini. Batas default adalah 516 KB. Jika aplikasi Java Anda memiliki banyak thread, batas ini dapat terlampaui. Hal ini memicu peringatan perf_event mmap failed... dalam output standar Java. Peringatan ini tidak memengaruhi aplikasi Java atau logika bisnis Anda. Satu-satunya efek samping adalah stack native tidak akan muncul dalam graf flame. Karena stack metode Java biasanya cukup untuk mendiagnosis CPU hot spots, Anda biasanya dapat mengabaikan peringatan ini.

Solusi

Untuk menghilangkan pesan error ini, lakukan langkah-langkah berikut:

  1. Pada mesin host, jalankan perintah berikut.

    echo 1028 > /proc/sys/kernel/perf_event_mlock_kb

    Ambang batas default adalah 516. Anda dapat meningkatkan nilai ini hingga peringatan berhenti. Nilai tersebut harus sesuai dengan rumus 8*N + 4, di mana N adalah bilangan asli. Misalnya, 516 = 512 + 4, dan 1028 = 1024 + 4.

  2. Untuk mengatasi error, restart Docker.

Operasi lainnya

Periksa apakah JDK di lingkungan Anda mencakup simbol debug

Hilangnya simbol debug akan menyebabkan aktivasi memory hot spot gagal. Akibatnya, tidak ada data memory hot spot yang dapat dikumpulkan.

  • Periksa log agent untuk simbol debug yang hilang.

    Di direktori instalasi agent, periksa direktori `logs` untuk file `cpc.log`. Pada beberapa versi agent lama, file ini berada di direktori `logs/arms_log`. Jika log berisi kata kunci No AllocTracer symbols found. Are JDK debug symbols installed?, artinya simbol debug hilang.

    2023-03-08 11:32:00 [continuous Profile collector] [INFO]
    Some or all engines success, details below
    CPU:true
    Alloc:false:No AllocTracer symbols found. Are JDK debug symbols installed?
    Wall:true
    Other:false
    Lock:false
  • Gunakan perintah untuk memeriksa apakah lingkungan Anda kehilangan simbol debug.

    • Buka path instalasi JDK.

      Anda dapat menemukan path instalasi JDK di lingkungan Anda menggunakan perintah which java atau echo $JAVA_HOME.

    • Dari level atas path instalasi JDK, jalankan perintah berikut untuk menemukan path ke file `libjvm.so`.

      find ./ -name "*libjvm.so*"
    • Jalankan perintah berikut untuk memeriksa apakah simbol debug telah di-strip dari file tersebut. Ganti /path/to/ dengan path yang sebenarnya.

      file /path/to/libjvm.so

      Jika perintah mengembalikan not stripped, JDK di lingkungan Anda mencakup simbol debug. Jika mengembalikan stripped, artinya tidak mencakup simbol debug.

      [root@iZj6cbirlzrhmgljxdfxw9Z jdk-directory]# cd jdk8u412-b08
      [root@iZj6cbirlzrhmgljxdfxw9Z jdk8u412-b08]# ls
      ASSEMBLY_EXCEPTION  LICENSE  NOTICE  THIRD_PARTY_README  bin  include  jre  lib  man  release  sample  src.zip
      [root@iZj6cbirlzrhmgljxdfxw9Z jdk8u412-b08]# find ./ -name "*libjvm.so*"
      ./jre/lib/amd64/server/libjvm.so
      [root@iZj6cbirlzrhmgljxdfxw9Z jdk8u412-b08]# file ./jre/lib/amd64/server/libjvm.so
      ./jre/lib/amd64/server/libjvm.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped

Solusi untuk kegagalan pengumpulan memory hot spot akibat simbol debug yang hilang

Metode 1: Upgrade ke JDK 11 atau yang lebih baru

Implementasi JDK 11 dan yang lebih baru telah disesuaikan dan tidak lagi bergantung pada informasi simbol debug.

Metode 2: Ubah citra dasar

Anda dapat membuka Docker Hub dan menggunakan kata kunci `openjdk` untuk menemukan distribusi JDK populer, seperti eclipse-temurin, ibm-semeru-runtimes, dan amazoncorretto. Kemudian, cari image JDK yang tidak dibangun di atas Alpine Linux. Jika Anda memiliki pustaka image JDK sendiri, Anda juga dapat mencari penggantinya di sana. Image JDK yang dibangun di atas Alpine Linux biasanya memiliki `alpine` dalam tag-nya.

Misalnya, image eclipse-temurin:8u382-b05-jdk-alpine memiliki alpine dalam tag-nya, yang menunjukkan bahwa image tersebut dibangun di atas Alpine Linux. Hindari penggunaan image ini.

Contoh versi JDK yang dibangun di atas image dasar Linux non-Alpine:

Misalnya, image eclipse-temurin:8u392-b08-jdk di Docker Hub tidak memiliki alpine dalam tag-nya. Ini adalah versi JDK yang dibangun di atas image dasar Linux non-Alpine dan mendukung beberapa arsitektur, termasuk linux/amd64, linux/arm/v7, linux/arm64/v8, linux/ppc64le, dan windows/amd64.

Jika Anda masih tidak memiliki data setelah mengubah image dasar, periksa file cpc.log lokal untuk pesan error No AllocTracer symbols found. Are JDK debug symbols installed?. Pesan ini menunjukkan bahwa simbol debug masih hilang di lingkungan Anda. Dalam hal ini, gunakan image dasar lain atau Metode 3: Gunakan Alpine Linux dan JDK standar.

Metode 3: Gunakan Alpine Linux dan JDK standar

Gunakan agent ARMS versi 3.2.8 atau yang lebih baru dan deklarasikan Alpine Linux serta JDK dalam Dockerfile.

from Alpine:3.9
RUN apk add openjdk8