All Products
Search
Document Center

Application Real-Time Monitoring Service:Diagnosis Arthas

Last Updated:Jun 17, 2026

Arthas adalah alat andal untuk mendiagnosis masalah produksi pada aplikasi Java. Dengan menggunakan bytecode instrumentation, Arthas memungkinkan Anda memeriksa status runtime program tanpa me-restart proses JVM.

Prasyarat

Penting
  • Pemantauan Aplikasi (ARMS) menyediakan halaman detail pemantauan baru bagi pengguna yang telah mengaktifkan paket penagihan baru. Untuk informasi selengkapnya, lihat Penagihan Produk (Baru).

    Jika Anda belum mengaktifkan paket penagihan baru dan ingin melihat halaman detail pemantauan baru, klik Switch to New Version pada halaman Application List.

  • Fitur ini saat ini hanya mendukung aplikasi Java.

  • Kami menyarankan agar fitur diagnosis Arthas hanya diaktifkan saat troubleshooting dan dinonaktifkan selama penggunaan rutin.

  • Versi agen ARMS adalah v2.7.1.3 atau lebih baru.

  • Aplikasi Anda telah terhubung ke Pemantauan Aplikasi. Untuk informasi selengkapnya, lihat Ikhtisar Pemantauan Aplikasi.

  • Aplikasi harus ditulis dalam Java.

Informasi latar belakang

Fitur diagnosis Arthas yang disediakan oleh ARMS terutama digunakan untuk melengkapi kemampuan diagnosis waktu nyata dari ARMS. Fitur diagnosis Arthas dari ARMS mencakup jenis-jenis berikut:

  • Ikhtisar JVM: Lihat penggunaan memori waktu nyata, informasi sistem, variabel sistem, dan variabel lingkungan untuk proses JVM saat ini.

  • Analisis durasi utas: Lihat waktu CPU yang dikonsumsi oleh utas dalam proses JVM saat ini dan stack metode waktu nyata dari utas tertentu.

  • Analisis eksekusi metode: Tangkap satu catatan eksekusi dari metode non-JDK apa pun yang memenuhi kondisi tertentu. Catatan ini mencakup parameter metode, exception, nilai kembali, serta durasi eksekusi metode internal.

  • Object viewer: Lihat nilai bidang waktu nyata dari instans kelas apa pun.

  • Dasbor waktu nyata: Lihat dasbor waktu nyata untuk komponen umum. Misalnya, dasbor waktu nyata untuk kolam koneksi Druid menampilkan konfigurasi, penggunaan, dan durasi eksekusi SQL-nya.

  • Analisis kinerja: Ambil sampel data seperti waktu CPU dan alokasi memori selama periode tertentu untuk menghasilkan graf nyala api (flame graph) yang sesuai.

  • Arthas Shell: Gunakan command line untuk melakukan diagnosis Arthas.

Informasi versi Arthas

Untuk versi agen ARMS dari v2.7.1.3 hingga 4.6.x, versi Arthas yang sesuai adalah 3.5.6. Untuk versi agen ARMS 4.7.x dan lebih baru, versi Arthas yang sesuai adalah 4.1.0.

Aktifkan diagnosis Arthas

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

  2. Pada halaman Application List, pilih wilayah di bagian atas halaman, lalu klik nama aplikasi target.

    Catatan

    Ikon pada kolom Language menunjukkan hal berikut:

    Java图标: aplikasi Java yang terhubung ke Pemantauan Aplikasi.

    image: aplikasi Go yang terhubung ke Pemantauan Aplikasi.

    image: aplikasi Python yang terhubung ke Pemantauan Aplikasi.

    -: aplikasi yang terhubung ke Managed Service for OpenTelemetry.

  3. Di bilah navigasi atas, pilih Application Configuration > Custom Configurations.

  4. Pada bagian Arthas Monitoring, aktifkan sakelar Arthas. Anda juga dapat menjalankan diagnosis hanya pada alamat IP tertentu dengan menambahkannya ke konfigurasi.

  5. Klik Save.

Lihat diagnosis Arthas

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

  2. Pada halaman Application List, pilih wilayah di bagian atas halaman, lalu klik nama aplikasi target.

    Catatan

    Ikon pada kolom Language menunjukkan hal berikut:

    Java图标: aplikasi Java yang terhubung ke Pemantauan Aplikasi.

    image: aplikasi Go yang terhubung ke Pemantauan Aplikasi.

    image: aplikasi Python yang terhubung ke Pemantauan Aplikasi.

    -: aplikasi yang terhubung ke Managed Service for OpenTelemetry.

  3. Di bilah navigasi atas, pilih Application Diagnostics > Arthas Diagnostics.

  4. Di bagian atas halaman Arthas Diagnostics, pilih instans yang akan didiagnosis dari daftar drop-down.

    • Jika agen ARMS untuk instans tersebut belum ditingkatkan ke v2.7.1.3 atau lebih baru, halaman akan meminta Anda untuk memperbarui agen terlebih dahulu.

    • Jika agen ARMS untuk instans tersebut telah ditingkatkan ke v2.7.1.3 atau lebih baru, halaman akan menampilkan informasi diagnosis Arthas untuk instans tersebut.

Ikhtisar JVM

Fitur ikhtisar JVM memberikan gambaran tingkat tinggi mengenai status JVM aplikasi Anda, termasuk memori, informasi sistem operasi, dan variabel.

Halaman diagnosis Arthas menampilkan tab JVM Overview secara default. Pada tab JVM Overview, Anda dapat melihat informasi berikut:

  • JVM Memory: Informasi mengenai memori JVM, termasuk penggunaan heap, penggunaan non-heap, dan status GC. Tabel menampilkan memori Used, Total, dan Max untuk area heap, buffer_pool, dan nonheap, serta Total Count dan Total Time untuk setiap jenis GC.

  • Operating System Information: Informasi mengenai sistem operasi, termasuk beban rata-rata, nama OS, versi OS, dan versi Java. Bidang-bidangnya mencakup systemLoadAverage, osVersion, javaVersion, processors, osName, javaHome, timestamp, dan uptime.

  • Variable information: Informasi mengenai variabel, termasuk variabel sistem dan variabel lingkungan. Halaman dibagi menjadi panel System variables di sebelah kiri dan panel Environment variables di sebelah kanan, masing-masing dilengkapi kotak pencarian untuk memfilter berdasarkan kata kunci. Variabel ditampilkan sebagai pasangan kunci-nilai.

Analisis durasi utas

Analisis durasi utas menampilkan semua utas aplikasi dan memungkinkan Anda melihat informasi stack utas. Hal ini membantu Anda mengidentifikasi utas dengan penggunaan CPU tinggi secara cepat.

  1. Pada halaman Arthas Diagnostics, klik tab Threading Time Analysis.

    Tab Threading Time Analysis mengambil penggunaan CPU waktu nyata dari utas dalam proses JVM saat ini dan mengelompokkan utas yang serupa. Bagian atas halaman menunjukkan jumlah utas dalam setiap status (NEW, TERMINATED, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING). Tabel di bawahnya mengagregasi utas berdasarkan Name, Total CPU, dan Count. Anda dapat memperluas grup untuk melihat ID, penggunaan CPU, State, dan aksi View real-time stack masing-masing utas.

  2. Klik ikon + di sebelah kiri grup utas untuk memperluas detailnya. Anda dapat melihat ID, penggunaan CPU, dan status setiap utas.

  3. Untuk melihat stack utas, klik View Live Stack pada kolom Actions untuk utas tersebut.

    Kotak dialog Thread Details muncul dan menampilkan nama utas, status (misalnya, RUNNABLE), serta stack Java lengkapnya.

Analisis eksekusi metode

Analisis eksekusi metode memungkinkan Anda menangkap durasi, parameter input, dan nilai kembali dari eksekusi metode tertentu, serta menyelidiki lebih dalam. Hal ini membantu Anda menemukan akar penyebab panggilan lambat secara cepat dan berguna untuk skenario di mana masalah tidak dapat direproduksi secara offline atau log tidak tersedia.

  1. Pada halaman Arthas Diagnostics, klik tab Method Execution Analysis.

  2. Pada tab Method Execution Analysis, masukkan kata kunci nama kelas di kotak pencarian dan klik ikon 搜索.

  3. Dari hasil pencarian, pilih kelas yang ingin didiagnosis, pilih metode dari daftar drop-down di sebelah kanan, lalu klik OK.

    Halaman menampilkan informasi dari eksekusi metode yang dipilih yang ditangkap secara acak oleh ARMS dan .

    • Bagian Execution Stack di sebelah kiri menampilkan catatan eksekusi internal dari metode yang didiagnosis.

      • Untuk menyelidiki lebih dalam metode internal, klik Drill-down pada kolom Actions.

      • Untuk melihat kode sumber metode, klik View Source Code di bagian atas bagian Execution Stack.

        Durasi eksekusi setiap metode internal ditampilkan sebagai komentar dalam kode sumber.

    • Bagian Method Execution Result di sebelah kanan menampilkan nilai parameter, nilai kembali, exception, variabel anggota, dan TraceID dari eksekusi metode ini.

    • Pada bagian Set Execution Conditions di sebelah kanan, ikuti langkah-langkah berikut untuk menetapkan kondisi penangkapan catatan eksekusi metode:

      1. Pilih metode overload dari metode saat ini.

      2. Dari daftar drop-down Please select initial filter key, pilih tipe kunci dan klik ikon 向左箭头.

        Tipe kunci filter awal:

        • params[n]: Parameter ke-n dari metode.

        • returnObj: Nilai kembali dari metode.

        • Method execution duration: Waktu eksekusi metode.

        • Whether an exception is thrown: Kondisi berdasarkan apakah metode melemparkan exception.

        Catatan

        Jika kunci filter awal yang dipilih merupakan tipe bersarang, Anda harus terus memilih bidang internalnya hingga mencapai tipe primitif.

      3. Pilih operator perbandingan.

      4. Masukkan nilai filter.

      5. Klik Add.

        Kondisi filter yang ditambahkan muncul di bagian Current Filter Condition.

        Sebagai contoh, pilih metode overload doGetDatas(ArmsCtx, String), atur kunci filter saat ini menjadi params[0].userId, pilih operator =, masukkan nilai 123, lalu klik Add. Bagian Current Filtering Conditions menampilkan kondisi yang dikonfigurasi, seperti params.length = 2 dan params[0].userId = 123.

      6. Klik ikon 刷新 di pojok kanan atas bagian Execution Stack. Sistem akan menangkap ulang eksekusi metode berdasarkan kondisi yang ditetapkan.

Object viewer

Gunakan object viewer untuk memeriksa status objek singleton dan memecahkan masalah konfigurasi aplikasi, daftar izin, daftar larangan, dan variabel anggota.

  1. Pada halaman Arthas Diagnostics, klik tab Object Viewer.

  2. Pada tab Object Viewer, masukkan kata kunci nama kelas di kotak pencarian dan klik ikon Search.

  3. Dari hasil pencarian, pilih kelas yang akan didiagnosis. Kemudian, dari daftar instans di sebelah kanan, pilih instans dan klik OK.

    Halaman menampilkan nilai waktu nyata bidang-bidang dalam instans tersebut. Halaman dibagi menjadi panel Real-time Field Values of Object di sebelah kiri (tabel dengan kolom Type, Field Name, dan Details) dan panel Field Details di sebelah kanan (yang menampilkan data JSON terperinci untuk bidang yang dipilih).

    • Untuk bidang tipe simple, kolom Details pada panel Object field real-time value menampilkan nilai bidang tersebut.

    • Untuk bidang tipe kompleks, klik View Details pada kolom Details panel Object field real-time value untuk melihat detail nilai bidang tersebut di panel Field Details di sebelah kanan.

      Panel Field Details hanya mendukung deserialisasi satu level untuk bidang kompleks. Untuk melihat data yang lebih spesifik, klik Click.

Dasbor waktu nyata

Gunakan dasbor waktu nyata untuk melihat status waktu nyata komponen kunci dalam sistem Anda, seperti kolam koneksi database dan kolam koneksi HTTP. Hal ini membantu Anda memecahkan masalah terkait sumber daya.

  1. Pada halaman Arthas Diagnostics, klik tab Live Kanban.

  2. Pada tab Live Kanban, pilih dasbor dari daftar drop-down, pilih instans dari kotak pemilihan instans di sebelah kanan, lalu klik Add to dashboard.

    Halaman menampilkan data waktu nyata untuk dasbor tersebut. Sebagai contoh, untuk kolam koneksi Druid, informasi status mencakup konfigurasi dasar, status kolam, dan distribusi durasi eksekusi. Konfigurasi dasar mencakup DbType dan URL. Status kolam mencakup metrik seperti ActiveCount, PoolingCount, dan MaxActive. Grafik batang di bawahnya menunjukkan connection holding time distribution dan transaction execution duration distribution.

Analisis kinerja

Analisis kinerja mengambil sampel data seperti waktu CPU dan alokasi memori selama periode tertentu serta menghasilkan graf nyala api (flame graph). Hal ini membantu Anda mengidentifikasi bottleneck kinerja aplikasi secara cepat.

  1. Pada halaman Arthas Diagnostics, klik tab Performance Analytics.

  2. Di bawah tab Performance Analytics, klik Create flame map.

  3. Pada kotak dialog Create flame map, pilih tipe graf nyala api, masukkan durasi pengambilan sampel dan keterangan, lalu klik Confirm.

    Parameter

    Deskripsi

    Contoh

    Flame graph type

    Tipe objek yang akan diambil sampelnya. Nilai yang valid:

    • CPU time

    • Memory allocation

    • Lock time

    • itimer

    CPU time

    Sampling duration (in seconds)

    Durasi pengambilan sampel. Nilai yang valid: 10 hingga 1800.

    30

    Informasi tugas untuk graf nyala api yang dibuat ditampilkan di bawah tab Performance Analytics, termasuk waktu mulai, durasi pengambilan sampel, keterangan, tipe graf nyala api, dan status tugas. Setelah tugas selesai, tautan View flame graph ditampilkan di kolom Task Status. Anda dapat mengklik tautan tersebut untuk melihat graf nyala api yang dihasilkan.

  4. Di bawah tab Performance Analytics, temukan catatan tugas. Di kolom Task Status, klik View flame chart. Ikuti petunjuk di layar untuk mengunduh file graf nyala api dalam format SVG, lalu buka file tersebut di browser.

    火焰图

Arthas Shell

Gunakan command line untuk melakukan diagnosis Arthas kustom.

Di bagian atas halaman Arthas Shell, Anda dapat memilih Route dan menggunakan tombol Connect atau Disconnect. Setelah koneksi berhasil, prompt status hijau Connected akan ditampilkan. Antarmuka terminal hitam di bawahnya menampilkan prompt perintah Arthas, seperti [arthas@9]$. Anda dapat memasukkan perintah Arthas di terminal untuk melakukan operasi diagnosis.

FAQ

Tidak ada prompt atau heartbeat setelah mengaktifkan Arthas

Masalah ini dapat terjadi karena dua alasan berikut:

  • Masalah konektivitas jaringan.

    Periksa konektivitas jaringan. Jika koneksi ke port diagnostik aplikasi publik dan privat (9092) gagal, Anda harus mengonfigurasi security group untuk mengizinkan akses outbound pada port 9092 untuk domain endpoint diagnostik dan akses di wilayah yang sesuai. Untuk informasi mengenai nama domain yang diperlukan, lihat Konfigurasi jaringan untuk pemantauan aplikasi Java. Domain diagnostik aplikasi sama dengan domain metadata jejak.

  • Aplikasi memiliki agen SkyWalking yang terpasang.

    Agen Arthas yang terintegrasi dalam ARMS tidak kompatibel dengan agen SkyWalking. Anda harus menguninstal agen SkyWalking atau memasang secara manual versi Arthas yang lebih baru (3.7.0 atau lebih baru).

    Jalankan perintah cat ~/logs/arthas/arthas.log. Exception yang menunjukkan ketidakcocokan agen akan ditampilkan di akhir log.

    2023-09-11 09:09:47 [arthas-binding-thread] ERROR c.t.a.core.server.ArthasBootstrap -start channel client failure
    java.lang.ExceptionInInitializerError: null
    	at com.alibaba.arthas.channel.proto.ArthasServiceGrpc$ArthasServiceStub.register(ArthasServiceGrpc.java:306)
    	at com.alibaba.arthas.channel.client.ChannelClient.connect(ChannelClient.java:165)
    	at com.alibaba.arthas.channel.client.ChannelClient.start(ChannelClient.java:111)
    	at com.taobao.arthas.core.server.ArthasBootstrap.bind(ArthasBootstrap.java:478)
    	at com.taobao.arthas.core.server.ArthasBootstrap.<init>(ArthasBootstrap.java:162)
    	at com.taobao.arthas.core.server.ArthasBootstrap.getInstance(ArthasBootstrap.java:613)
    	at com.taobao.arthas.core.server.ArthasBootstrap.getInstance(ArthasBootstrap.java:601)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at com.taobao.arthas.agent334.AgentBootstrap.bind(AgentBootstrap.java:182)
    	at com.taobao.arthas.agent334.AgentBootstrap.access$000(AgentBootstrap.java:20)
    	at com.taobao.arthas.agent334.AgentBootstrap$1.run(AgentBootstrap.java:152)
    Caused by: java.lang.reflect.InvocationTargetException: null
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at io.grpc.stub.ClientCalls.<clinit>(ClientCalls.java:52)
    	... 14 common frames omitted
    Caused by: java.lang.reflect.InvocationTargetException: null
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.dynamic.Nexus.initialize(Nexus.java:139)
    	... 19 common frames omitted
    Caused by: java.lang.NoClassDefFoundError: Lorg/apache/skywalking/apm/agent/core/plugin/interceptor/enhance/StaticMethodsInter;
    	at java.lang.Class.getDeclaredFields0(Native Method)
    	at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    	at java.lang.Class.getDeclaredField(Class.java:2068)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.implementation.LoadedTypeInitializer$ForStaticField.onLoad(LoadedTypeInitializer.java:163)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.implementation.LoadedTypeInitializer$Compound.onLoad(LoadedTypeInitializer.java:233)
    	at org.apache.skywalking.apm.dependencies.net.bytebuddy.agent.builder.AgentBuilder$InitializationStrategy$SelfInjection$Dispatcher$InjectingInitializer.onLoad(AgentBuilder.java:3655)
    	... 24 common frames omitted
    Caused by: java.lang.ClassNotFoundException: org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.StaticMethodsInter
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at com.taobao.arthas.agent.ArthasClassloader.loadClass(ArthasClassloader.java:34)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	... 30 common frames omitted
    

Kegagalan perintah dalam analisis eksekusi metode

Animasi loading di bagian Execution Stack pada halaman Method execution analysis menunjukkan bahwa sistem sedang menunggu metode dipanggil.

Analisis eksekusi metode menangkap eksekusi metode yang dipilih secara waktu nyata. Jika metode tidak dieksekusi selama periode tunggu, operasi akan timeout dan error ini terjadi. Anda dapat mengklik ikon Refresh untuk mencoba lagi.

Ukuran ruang survivor salah

Ruang survivor dibagi menjadi dua bagian yang sama besar: ruang "from" dan ruang "to". Arthas hanya menampilkan ukuran ruang "from".

Penagihan untuk diagnosis Arthas

Tidak. Tidak ada biaya tambahan untuk fitur ini.

Koneksi ditolak saat memasang Arthas secara manual

Secara default, Arthas menggunakan port 3658 untuk menerima koneksi klien baru. Untuk mencegah konflik port saat beberapa proses pada host yang sama memasang Arthas, Arthas yang terintegrasi ARMS menggunakan port acak. Hal ini dapat menyebabkan kegagalan pemasangan. Jika masalah ini terjadi, Anda harus menonaktifkan fitur Arthas di Konsol ARMS sebelum memasang Arthas secara manual.

Error "Arthas server already bind"

Jika instance Arthas open-source sebelumnya telah dipasang ke aplikasi, Arthas yang terintegrasi ARMS tidak dapat diaktifkan. Anda harus terlebih dahulu menghapus Arthas open-source, lalu mengaktifkan Arthas yang terintegrasi ARMS.