全部产品
Search
文档中心

Application Real-Time Monitoring Service:FAQ

更新时间:Jul 02, 2025

Topik ini menjawab pertanyaan-pertanyaan umum (FAQ) tentang fitur profil kontinu dari Application Real-Time Monitoring Service (ARMS).

Mengapa tidak ada data di halaman setelah mengaktifkan profil kontinu?

  1. Periksa apakah konfigurasi terkait sudah benar dan apakah segmen jaringan yang dikonfigurasi mencakup alamat IP dari instance aplikasi.

  2. Jika Anda menggunakan ARMS agent sebelum versi V3.1.4, mesin profiling mungkin gagal karena masalah kompatibilitas dengan Alpine base image (masalah ini telah diperbaiki di versi 3.1.4). Untuk memastikan stabilitas fungsional dan integritas data, disarankan untuk memperbarui agent ke V3.1.4 atau lebih baru.

    Catatan

    Untuk informasi tentang cara memeriksa apakah Anda menggunakan Alpine Linux base image, lihat Lainnya.

  3. Profil kontinu mengumpulkan data dengan meningkatkan Async Profiler open-source. Saat ini, ia tidak mendukung pemasangan beberapa Async Profiler secara bersamaan. Jika aplikasi juga menggunakan fitur profil kontinu yang disediakan oleh Pyroscope agent, aplikasi mungkin gagal untuk memulai.

  4. Atur ulang waktu kueri pada halaman Diagnostik Aplikasi > Profil Kontinu mundur selama 8 jam dan periksa apakah data ada. Jika data ada, itu mungkin karena zona waktu aplikasi diatur ke UTC+0, menyebabkan waktu penulisan data menjadi 8 jam lebih lambat daripada UTC+8.

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

    Catatan

    Disarankan untuk menyaring berdasarkan nama pod saat ini pada halaman Diagnostik Aplikasi > Profil Kontinu untuk menghindari kebingungan yang disebabkan oleh banyaknya restart kontainer dalam 8 jam terakhir.

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

    Masalah ini telah diperbaiki di ARMS agent V4.1.10. Jika Anda yakin bahwa ini adalah masalahnya, Anda dapat langsung memperbarui agent ke V4.1.10 atau lebih baru.

  5. Periksa apakah aplikasi itu sendiri telah memuat library dinamis Async Profiler lainnya sebagai berikut:

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

      lsof -p [pid] | grep libasync
    2. Jika hasilnya berisi library dinamis non-Alibaba Cloud yang mirip dengan salah satu berikut ini, aplikasi itu sendiri menggunakan library dinamis Async Profiler, yang menyebabkan ketidaksesuaian dengan ARMS. Dalam hal ini, Anda perlu menghapus library dinamis tersebut sebelum melanjutkan penggunaan fitur ARMS.

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

Persentase penggunaan memori heap yang ditampilkan dalam pemantauan memori heap dan yang terdeteksi selama periode tertentu dalam profil kontinu berbeda. Apakah ini normal?

Profil kontinu hanya mencatat alokasi memori heap selama periode tertentu, bukan jumlah total memori yang sebenarnya dimiliki oleh proses saat ini. Oleh karena itu, wajar jika terdapat perbedaan antara kedua set data ini.

Mengapa diagnostik CPU menampilkan data sementara diagnostik memori tidak menampilkan apa pun?

Masalah

Tidak adanya data diagnostik memori biasanya terjadi pada ARMS agents V3.1.4 atau lebih baru dalam lingkungan kontainer yang menggunakan Alpine base images. Alpine menghilangkan simbol debug JDK untuk mengurangi ukuran gambar, menonaktifkan kemampuan profil kontinu.

Solusi

  1. Periksa apakah JDK di lingkungan tersebut mengandung simbol debug.

  2. Jika tidak, instal simbol debug untuk JDK di gambar Anda (instalasi mungkin gagal untuk beberapa versi JDK tanpa paket simbol debug) atau gunakan base images non-Alpine.

Mengapa tidak ada data untuk hotspot kode? Mengapa data hotspot kode tidak sesuai harapan?

  1. Analisis hotspot memori tidak tersedia untuk aplikasi yang menggunakan thread virtual atau teknologi serupa dalam JDK mereka (termasuk Alibaba Dragonwell JDK).

  2. Saat ini, fitur hotspot kode tidak didukung oleh protokol SkyWalking. Verifikasi tipe protokol dalam detail rentang jejak.

  3. Fitur hotspot kode memerlukan ARMS agent V3.1.4 atau lebih baru.

  4. ARMS agents sebelum V4.2.1 hanya mendukung invokasi sinkron dan mungkin menunjukkan pengumpulan data yang tidak lengkap. Invokasi asinkron dapat mengakibatkan data hilang atau tidak akurat. Misalnya, ketika framework seperti Spring Cloud Gateway, Undertow, dan Lettuce digunakan, pergantian thread asinkron dapat menyebabkan pengumpulan data yang tidak akurat. Agents V4.2.1 dan lebih baru dioptimalkan untuk menyelesaikan masalah ini. Perbarui agent Anda untuk performa optimal.

  5. Hotspot kode hanya didukung untuk jejak yang diambil dengan laju sampling tetap. Mengumpulkan jejak menggunakan laju sampling tidak tetap dapat menimbulkan overhead performa yang signifikan, seperti mis-sampling (s9) dan slow sampling (s10) yang dipicu setelah selesainya jejak (Anda dapat memeriksa bidang sample.reason dalam atribut rentang). Jejak yang dikumpulkan menggunakan laju sampling tidak tetap saat ini tidak mendukung hotspot kode.

    Untuk jejak yang dikumpulkan dengan laju sampling tidak tetap, disarankan untuk menyaring jejak yang berisi hotspot kode menggunakan parameter Jejak dengan Kode Hotspot pada halaman Penjelajah Jejak untuk diagnosis masalah.

    image

  6. Jika Anda menggunakan agent V4.2.1 atau lebih baru tetapi menemukan bahwa durasi yang dikumpulkan jauh lebih rendah daripada durasi yang dicatat oleh rentang luar, ini mungkin menunjukkan bahwa aplikasi Anda menggunakan framework NIO asinkron, non-blocking (misalnya, Spring Cloud Gateway). Framework semacam itu, ketika mengirim permintaan ke layanan downstream, tidak memblokir thread jika data downstream belum siap; sebaliknya, mereka segera kembali, memungkinkan thread melakukan tugas lain dan dengan demikian meningkatkan pemanfaatan thread. Karena tidak ada eksekusi thread aktual dalam skenario ini, hambatan performa mungkin tidak terletak di dalam aplikasi saat ini. Dalam kasus seperti itu, durasi pengumpulan hotspot kode mungkin jauh lebih rendah daripada durasi rentang. Anda harus fokus menyelidiki apakah ada hambatan dalam pemrosesan permintaan aplikasi downstream atau latensi jaringan.

Berapa overhead performa dari profil kontinu?

  • Profil kontinu telah diuji dan, dalam skenario 500 TPS dengan semua fitur diaktifkan dalam aplikasi Spring Web tipikal, overhead CPU meningkat sekitar 5%, penggunaan memori off-heap meningkat sekitar 50 MB, dan GC serta latensi permintaan tidak menunjukkan peningkatan yang signifikan.

  • Dalam kasus ekstrem, karena analisis hotspot memori saat ini belum menerapkan throttling, jika aplikasi sering mengalokasikan memori, ia dapat menghasilkan sejumlah besar event terkait (seperti puluhan ribu per menit), yang berpotensi mempengaruhi latensi P99. Anda dapat menonaktifkan profil memori sementara untuk menyelesaikan masalah ini.

    Masalah ini telah diperbaiki di V4.1.10. Anda dapat langsung memperbarui agent ke V4.1.10 atau lebih baru.

Mengapa ada thread JFR terkait dalam aplikasi?

  • Fitur profil kontinu menghasilkan thread JFR. Thread ini terutama ada di ARMS agent V4.1.10 dan tidak akan lagi diperkenalkan secara aktif di V4.1.10 atau lebih baru.

  • Thread ini tidak akan menyebabkan hambatan performa untuk aplikasi.

  • Setelah menonaktifkan profil kontinu secara dinamis, thread tidak akan segera dihapus tetapi hanya akan menghilang setelah aplikasi di-restart.

Apa yang harus saya lakukan jika profil kontinu memengaruhi waktu startup aplikasi?

Untuk aplikasi yang mengaktifkan profil kontinu, jika JDK kekurangan simbol debug dan class loader memuat banyak metode, kecepatan startup mungkin melambat secara signifikan. Namun, setelah startup selesai, tidak ada dampak pada performa runtime.

Masalah ini telah diperbaiki di V4.2.1 dan tidak akan memengaruhi startup aplikasi. Anda dapat memperbarui agent ke V4.2.1 atau lebih baru.

Mengapa total memori dalam graf nyala api melebihi batas memori yang dikonfigurasi secara aktual?

Data yang ditampilkan dalam profil kontinu tidak secara langsung terkait dengan konfigurasi mesin. Data tersebut mewakili ukuran memori heap yang dialokasikan selama periode waktu yang dianalisis. Karena pengumpulan sampah, diharapkan bahwa memori yang ditampilkan mungkin melebihi memori yang dikonfigurasi secara aktual pada mesin.

Apa yang harus saya lakukan jika integrasi OpenJ9 JDK gagal?

Profil kontinu saat ini tidak mendukung Eclipse OpenJ9 (sebelumnya dikenal sebagai IBM J9). JDK ini mungkin gagal diintegrasikan, melaporkan kesalahan. Disarankan untuk menggunakan OpenJDK atau Oracle JDK.

Apa yang harus saya lakukan jika data hotspot kode dalam Spans tidak lengkap?

Hotspot kode dikumpulkan dengan mengambil sampel tumpukan metode thread dalam jejak pada interval reguler. Untuk metode yang hilang dalam graf nyala api hotspot kode, periksa apakah waktu eksekusi mereka kurang dari 500 milidetik. Jika ya, mereka mungkin tidak tertangkap. Ini tidak memengaruhi diagnosis jejak lambat terkait, karena metode dengan waktu eksekusi pendek tidak mungkin menjadi hambatan performa.

Mengapa graf nyala api berisi .GC_active stack?

.GC_active menunjukkan bahwa selama pengumpulan data graf nyala api, aplikasi terpengaruh oleh proses Stop-the-World dari pengumpulan sampah (di mana semua thread bisnis Java dihentikan). Ini menyebabkan penangguhan thread bisnis terkait. Jika .GC_active muncul dalam hotspot kode, itu berarti sebagian latensi permintaan disebabkan oleh jeda GC.

Mengapa graf nyala api berisi entri .no_Java_frame?

Ini umumnya disebabkan oleh penggunaan Alpine base image. Untuk mengurangi ukuran gambar, Alpine menghilangkan simbol debug JDK, mencegah pengenalan nama fungsi dalam tumpukan metode thread C++ di dalam JDK. Akibatnya, tumpukan ini ditampilkan sebagai .no_Java_frame. Karena tumpukan ini terutama mewakili informasi eksekusi thread non-Java (seperti thread VM atau thread kompiler JIT), Anda dapat mengabaikannya jika proporsinya rendah dan fokus pada tumpukan metode Java lainnya untuk analisis performa. Jika entri .no_Java_frame memiliki proporsi tinggi, pertimbangkan untuk menginstal simbol debug untuk JDK di base image atau beralih ke base image non-Alpine. Perhatikan bahwa beberapa versi JDK kekurangan paket simbol debug yang sesuai, yang mungkin mencegah instalasi.

Mengapa item "lainnya" muncul dalam graf nyala api?

Masalah

Item "lainnya" muncul dalam graf nyala api, seperti yang ditunjukkan pada gambar berikut.

火焰图other选项

Penyebab

Kemunculan item "lainnya" dalam graf nyala api adalah normal. Graf nyala api pada dasarnya adalah struktur pohon. Ketika ada banyak node, sulit untuk mengekstraksi informasi utama dari graf. Oleh karena itu, ARMS menggabungkan beberapa node yang kurang penting ke dalam kategori "lainnya" untuk menyederhanakan visualisasi dan menyoroti informasi penting.

Apakah keluaran log "parse lib sigsegv handler installed" memengaruhi aplikasi saat runtime?

Pesan log ini dicetak oleh ARMS agent dan dianggap sebagai logging yang tidak perlu. Ini hanya muncul setelah mengaktifkan profil kontinu dan tidak memiliki dampak pada aplikasi saat runtime. Selain itu, ARMS berencana untuk menonaktifkan keluaran log ini di versi mendatang.

Bagaimana cara menyelesaikan kesalahan "No access to perf events" yang disebabkan oleh pembatasan pada perf_event_open?

Masalah

async-profiler bergantung pada panggilan sistem perf_event_open untuk profil CPU. Namun, karena kebijakan keamanan (seperti seccomp) yang mengontrol izin panggilan sistem di kernel Linux, panggilan sistem tertentu mungkin dilarang. Pesan kesalahan akan menunjukkan bahwa tidak ada akses ke acara perf.

Pesan kesalahan:

[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

  • Lingkungan Docker: Jalankan perintah berikut untuk menjalankan kontainer. Untuk konfigurasi kontrol panggilan sistem yang lebih rinci, lihat Docker documentation.

      docker run --security-opt seccomp=unconfined  XXX
  • Lingkungan Kubernetes: Konfigurasikan parameter kontainer privileged privileged: true. Kontainer privileged tetap Unconfined.

    Untuk konfigurasi kontrol panggilan sistem yang lebih rinci, lihat Kubernetes documentation.

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

Kesalahan ini atau data profil yang hilang mungkin terjadi pada proses Java yang berjalan di lingkungan kontainer ketika Alpine base images digunakan. Gambar-gambar tersebut menghilangkan simbol debug JDK untuk mengurangi ukuran gambar, memburuknya fungsi profil kontinu. Dalam hal ini, tingkatkan JDK, ubah base images, atau gunakan Alpine Linux standar dan JDK sesuai kebutuhan.

Bagaimana cara menyelesaikan kesalahan "perf_event mmap failed..."?

Masalah

Kesalahan ini biasanya muncul di output standar JVM. Ketika fitur profil kontinu mengumpulkan sampel hotspot CPU, ia secara bersamaan mengumpulkan tumpukan native (Linux Kernel + JVM + C/C++) dan tumpukan Java. Pengumpulan tumpukan native memerlukan melakukan MMap pada deskriptor file perf_event untuk setiap thread di Java. Kernel Linux memberlakukan batas pada ukuran memori total untuk operasi MMap terkait perf_event (batas default: 516 KB). Ketika ada banyak thread di Java, batas ini bisa dilampaui, memicu pesan peringatan di output standar Java: perf_event mmap failed... Peringatan ini tidak memiliki efek samping pada operasi Java atau logika bisnis. Dampak sebenarnya adalah bahwa tumpukan native tidak akan muncul dalam graf nyala api. Secara umum, ketika mendiagnosis masalah hotspot CPU, pemeriksaan hanya pada tumpukan metode Java sudah cukup, jadi Anda dapat dengan aman mengabaikan peringatan ini.

Solusi

Untuk menyelesaikan kesalahan ini, ikuti langkah-langkah berikut:

  1. Jalankan perintah berikut di host.

    echo 1028 > /proc/sys/kernel/perf_event_mlock_kb

    Batas default adalah 516 KB. Anda dapat secara bertahap meningkatkan nilai ini sampai peringatan menghilang. Disarankan untuk menyetel nilai ini agar memenuhi rumus 8 × N + 4, di mana N adalah bilangan asli. Contoh: 516 = 512 + 4, 1028 = 1024 + 4.

  2. Restart Docker untuk menyelesaikan kesalahan.

Lainnya

Bagaimana cara memverifikasi bahwa JDK di lingkungan berisi simbol debug?

Kehilangan simbol debug mencegah aktivasi dan pengumpulan data hotspot memori. Gunakan salah satu cara berikut untuk memeriksa apakah JDK di lingkungan, tempat ARMS agent berada, berisi simbol debug:

Lihat log agent

Periksa direktori logs agent untuk file cpc.log (atau file logs/arms_log untuk versi agent awal). Kata kunci No AllocTracer symbols found. Are JDK debug symbols installed? menunjukkan simbol yang hilang.

image

Jalankan perintah

  1. Jalankan perintah which java atau echo $JAVA_HOME untuk menemukan jalur JDK.

  2. Jalankan perintah berikut dari direktori root JDK untuk menemukan jalur file libjvm.so:

    find ./ -name "*libjvm.so*"
  3. Jalankan perintah berikut untuk memeriksa apakah plugin telah dibuang dari simbol debug. Ganti /path/to/ dengan jalur yang menyimpan file libjvm.so.

    file /path/to/libjvm.so

    Jika not stripped dikembalikan, JDK berisi simbol debug.

    image

Bagaimana cara menyelesaikan kegagalan pengumpulan hotspot memori yang disebabkan oleh hilangnya simbol debug?

Gunakan salah satu cara berikut untuk menyelesaikan kegagalan tersebut:

Tingkatkan JDK ke JDK 11 atau lebih baru

Implementasi JDK 11 dan lebih baru tidak lagi memerlukan simbol debug karena optimasi arsitektur.

Ubah base images

Kunjungi Docker Hub dan cari distribusi JDK populer menggunakan kata kunci openjdk (seperti eclipse-temurin, ibm-semeru-runtimes, dan amazoncorretto). Kemudian, cari gambar JDK yang tidak dibangun di atas Alpine Linux. Jika Anda memiliki repositori sendiri dari gambar JDK yang sering digunakan, Anda juga dapat menggunakan gambar di sana. Biasanya, gambar JDK yang dibangun di atas Alpine Linux mencakup kata kunci seperti alpine dalam tag mereka.

image.png

Contoh versi JDK yang dibangun di atas base images non-Alpine Linux:

image.png

Jika masalah tetap ada setelah Anda mengubah base images, periksa apakah file local cpc.log berisi kesalahan No AllocTracer symbols found .Are JDK debug symbols installed?, yang menunjukkan hilangnya simbol debug di lingkungan Anda. Dalam hal ini, gunakan base images lain atau Alpine Linux standar dan JDK.

Gunakan Alpine Linux standar dan JDK

Gunakan ARMS agent V3.2.8 atau lebih baru dan deklarasikan Alpine Linux dan JDK dalam Dockerfile Anda.

from Alpine:3.9
RUN apk add openjdk8