Arthas adalah alat untuk mendiagnosis masalah pada aplikasi Java yang sedang berjalan. Alat ini menggunakan teknologi peningkatan bytecode sehingga Anda dapat memeriksa status aplikasi tanpa perlu me-restart proses Java Virtual Machine (JVM).
Layanan Pemantauan Aplikasi Waktu Nyata (ARMS) telah terintegrasi penuh dengan seluruh kemampuan Arthas. Dibandingkan dengan pemasangan Arthas secara manual, kemampuan Arthas yang terintegrasi dalam ARMS memiliki keunggulan berikut:
Kemampuan Arthas tidak bergantung pada lingkungan Java Development Kit (JDK). Anda tidak perlu mengunduh dan menginstal Arthas serta dapat mengaktifkan atau menonaktifkan kemampuan tersebut kapan saja sesuai kebutuhan bisnis.
Fitur utama dapat diakses melalui browser tanpa perlu menentukan perintah atau ekspresi tertentu.
Kemampuan Arthas terhubung dengan konteks ARMS. Anda dapat menjalankan perintah trace untuk melihat ID jejak (trace ID) dari ARMS.
Prasyarat
Pemantauan Aplikasi menyediakan halaman detail pemantauan baru bagi pengguna yang telah mengaktifkan mode penagihan baru. Untuk informasi lebih lanjut tentang mode penagihan baru, lihat Penagihan Produk (Baru).
Jika Anda belum mengaktifkan mode penagihan baru tetapi ingin melihat halaman detail pemantauan baru, klik Switch to New Version pada halaman Applications.
Fitur ini hanya tersedia untuk aplikasi Java.
Aktifkan diagnostik Arthas hanya untuk troubleshooting. Nonaktifkan selama penggunaan harian.
Versi agen ARMS adalah 2.7.1.3 atau yang lebih baru.
Aplikasi harus terhubung ke Pemantauan Aplikasi. Untuk informasi lebih lanjut, lihat Ikhtisar Pemantauan Aplikasi.
Aplikasi harus dikembangkan dalam bahasa Java.
Informasi latar belakang
ARMS telah terintegrasi dengan kemampuan diagnostik waktu nyata Arthas berikut:
Ikhtisar JVM: memungkinkan Anda melihat penggunaan memori waktu nyata, informasi sistem, variabel sistem, dan variabel lingkungan dari proses JVM.
Analisis thread: memungkinkan Anda melihat konsumsi waktu thread dan stack metode waktu nyata dari thread tertentu dalam proses JVM.
Analisis eksekusi metode: menangkap catatan eksekusi dari metode non-JDK apa pun yang memenuhi kondisi tertentu, serta mencatat parameter, exception, nilai kembali, dan durasi eksekusi setiap metode internal.
Object viewer: memungkinkan Anda melihat nilai properti waktu nyata dari instans kelas apa pun.
Dasbor waktu nyata: memungkinkan Anda melihat informasi waktu nyata komponen umum. Misalnya, Anda dapat melihat konfigurasi, penggunaan, dan konsumsi waktu query SQL dalam kolam koneksi Druid.
Arthas Shell: memungkinkan Anda melakukan diagnostik Arthas menggunakan command-line interface (CLI).
Analisis performa Arthas telah sepenuhnya ditingkatkan menjadi fitur continuous profiling, yang lebih mudah digunakan dan lebih kuat, serta dapat diaktifkan dan digunakan kapan saja secara rutin.
Fitur continuous profiling dapat secara efektif mengidentifikasi bottleneck yang disebabkan oleh CPU, memori, atau I/O dalam program Java, serta menampilkan data statistik berdasarkan nama metode, nama kelas, dan nomor baris. Hal ini membantu developer mengoptimalkan program, mengurangi latency, meningkatkan throughput, dan menghemat biaya. Untuk informasi lebih lanjut, lihat Menggunakan fitur continuous profiling.
Informasi versi Arthas
Untuk versi agen ARMS 2.7.1.3 hingga 4.6.x, versi Arthas yang sesuai adalah 3.5.6. Untuk versi agen ARMS 4.7.x dan yang lebih baru, versi Arthas yang sesuai adalah 4.1.0.
Aktifkan diagnostik Arthas
Masuk ke ARMS console. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih .
Pada bagian Arthas Monitoring, aktifkan sakelar Arthas. Jika diperlukan, Anda dapat memilih untuk melakukan diagnostik hanya pada alamat IP tertentu dan menambahkan alamat IP target tersebut.
Klik Save.
Lihat informasi diagnostik Arthas
Masuk ke ARMS console. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih .
Pada halaman Arthas Diagnosis, pilih instans aplikasi yang ingin didiagnosis dari daftar drop-down di bagian atas.
Jika agen ARMS yang diinstal pada instans tersebut versinya lebih lama dari V2.7.1.3, Anda akan diminta untuk memperbarui agen tersebut.
Jika agen ARMS yang diinstal pada instans tersebut versinya V2.7.1.3 atau yang lebih baru, halaman akan menampilkan informasi instans yang disediakan oleh Arthas.
Ikhtisar JVM
Pada tab ikhtisar JVM, Anda dapat melihat informasi JVM tentang aplikasi, termasuk statistik memori JVM dan informasi tentang sistem operasi serta variabel.
Saat Anda masuk ke halaman Arthas Diagnosis, tab JVM overview ditampilkan secara default. Tab JVM overview berisi bagian-bagian berikut:
JVM memory: menampilkan informasi tentang memori JVM, seperti penggunaan heap memory dan non-heap memory, serta informasi tentang garbage collection (GC).

Operating system information: menampilkan informasi tentang sistem operasi, seperti beban rata-rata sistem, nama dan versi sistem operasi, serta versi Java.

Variable information: menampilkan informasi tentang variabel sistem dan variabel lingkungan.

Analisis durasi thread
Pada tab Thread time-consuming analysis, Anda dapat melihat semua thread aplikasi dan informasi stack setiap thread. Informasi pada tab ini membantu Anda mengidentifikasi thread yang memakan waktu lama.
Pada halaman Arthas Diagnosis, klik tab Thread time-consuming analysis.
Anda dapat melihat konsumsi waktu thread dalam proses JVM pada tab Thread time-consuming analysis. Thread yang serupa ditampilkan dalam satu baris sebagai kategori.

Klik ikon + di sebelah kiri nama kategori thread untuk melihat detail semua thread dalam kategori tersebut, termasuk ID thread, penggunaan CPU, dan status.
Klik View the live stack pada kolom Actions suatu thread untuk melihat informasi stack thread tersebut.

Analisis eksekusi metode
Pada tab Method execution analysis, Anda dapat melihat informasi seperti konsumsi waktu, parameter input, dan nilai kembali suatu metode, bahkan dapat menyelidiki lebih dalam ke metode internal. Informasi ini dapat digunakan untuk mengidentifikasi akar penyebab panggilan lambat dan log yang hilang, atau memecahkan masalah yang tidak dapat direproduksi.
Pada halaman Arthas Diagnosis, klik tab Method execution analysis.
Pada tab Method execution analysis, masukkan kata kunci nama kelas ke dalam kotak pencarian, lalu klik ikon
.Temukan kelas yang ingin didiagnosis dari daftar kelas yang ditampilkan. Pilih metode dari kelas tersebut pada daftar drop-down di sisi kanan, lalu klik OK.
ARMS menangkap catatan eksekusi acak dari metode tersebut. Informasi eksekusi ditampilkan.

Catatan eksekusi internal dari metode yang Anda pilih ditampilkan di bagian Execution Stack di sisi kiri.
Untuk menyelidiki lebih dalam ke metode internal, temukan metode internal tersebut dan klik Drill in pada kolom Actions.
Untuk melihat kode sumber metode tersebut, klik View Source Code di sebelah Execution Stack.
Durasi eksekusi setiap metode internal ditampilkan dalam anotasi pada kode sumber.
Bagian Method Execution Result di sisi kanan menampilkan nilai parameter, nilai kembali, exception, variabel anggota, dan trace ID dari metode tersebut.
Pada bagian Set Execution Conditions di sisi kanan, lakukan langkah-langkah berikut untuk menetapkan kondisi penangkapan catatan eksekusi metode.
Pilih metode reload dari daftar drop-down.
Pada daftar drop-down Select Initial Filter Key, pilih tipe kunci yang ingin ditentukan terlebih dahulu dan klik ikon
.Tipe kunci:
params[n]: parameter ke-n dari metode.
returnObj: nilai kembali dari metode.
Method execution duration: durasi eksekusi metode.
Exception thrown or not: menentukan apakah terjadi exception selama eksekusi metode.
CatatanJika kunci bersarang dipilih, Anda perlu terus menentukan field dari kunci bersarang tersebut hingga mencapai field dasar.
Pilih kondisi.
Masukkan nilai.
Klik Add.
Kondisi untuk memilih catatan eksekusi metode ditampilkan di bagian Current Filtering Conditions.

Di pojok kanan atas bagian Execution Stack, klik ikon
. Sistem kemudian akan menangkap catatan eksekusi metode berdasarkan kondisi yang ditentukan.
Object viewer
Pada tab objectViewer, Anda dapat melihat informasi beberapa objek singleton untuk memecahkan masalah exception aplikasi, seperti kesalahan konfigurasi, item yang tidak sesuai dalam blacklist atau daftar putih, serta status abnormal variabel anggota.
Pada halaman Arthas Diagnosis, klik tab objectViewer.
Pada tab objectViewer, masukkan kata kunci nama kelas ke dalam kotak pencarian dan klik ikon Search.
Pilih kelas yang ingin didiagnosis dari daftar kelas yang ditampilkan, pilih instans dari kelas tersebut di panel sisi kanan, lalu klik OK.
Nilai field waktu nyata dari instans tersebut ditampilkan.

Nilai field sederhana ditampilkan di kolom Details pada bagian Real-time Field Values of Object di sisi kiri.
Untuk melihat nilai field kompleks, klik View Details pada kolom Details di bagian Real-time Field Values of Object di sisi kiri. Nilai field detail ditampilkan di bagian Field Details di sisi kanan.
Hanya sebagian nilai field kompleks yang dapat dideserialisasi dan ditampilkan di bagian Field Details. Untuk melihat lebih banyak data, klik tautan click dalam tanda kurung di sebelah Details.
Dasbor waktu nyata
Pada tab Real-time board, Anda dapat melihat informasi waktu nyata komponen kunci yang sedang digunakan, seperti penggunaan kolam koneksi database dan penggunaan kolam koneksi HTTP. Informasi ini membantu Anda mengidentifikasi masalah sumber daya.
Pada halaman Arthas Diagnosis, klik tab Real-time board.
Pada tab Real-time board, pilih dasbor dari daftar drop-down, pilih instans dasbor tersebut, lalu klik Add to board.
Informasi waktu nyata suatu komponen ditampilkan. Gambar berikut menunjukkan informasi waktu nyata kolam koneksi Druid, termasuk konfigurasi dasar, status kolam koneksi, dan durasi eksekusi.

Arthas Shell
Fitur ini hanya tersedia di wilayah berikut: Tiongkok (Beijing), Tiongkok (Shanghai), Tiongkok (Hangzhou), Tiongkok (Shenzhen), dan Tiongkok (Zhangjiakou).
Anda dapat melakukan diagnostik Arthas menggunakan CLI.

FAQ
Mengapa Arthas tidak menampilkan prompt dan tidak ada heartbeat setelah diaktifkan?
Masalah ini dapat terjadi karena alasan berikut:
Kegagalan koneksi jaringan.
Periksa konektivitas jaringan. Jika koneksi ke port diagnostik aplikasi publik (9092) dan port diagnostik aplikasi internal (9092) gagal, Anda harus memberikan izin akses outbound pada port 9092 untuk nama domain diagnostik aplikasi dalam security group. Anda juga harus memberikan izin untuk nama domain endpoint wilayah yang sesuai. Untuk daftar nama domain yang memerlukan akses, lihat Konfigurasi jaringan untuk pemantauan aplikasi Java. Nama domain diagnostik aplikasi sama dengan nama domain metadata call trace.
Agen SkyWalking dipasang pada aplikasi.
Arthas yang terintegrasi dengan ARMS tidak kompatibel dengan SkyWalking. Keduanya tidak dapat berjalan bersamaan. Anda harus menguninstall agen SkyWalking atau memasang Arthas versi 3.7.0 atau yang lebih baru secara manual.
Jalankan perintah
cat ~/logs/arthas/arthas.log. Di akhir log, Anda dapat menemukan pesan exception yang menunjukkan ketidakcocokan agen.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
Mengapa tab Method Execution Analysis menampilkan ikon loading dalam waktu lama lalu melaporkan kegagalan eksekusi perintah?

Analisis eksekusi metode menangkap eksekusi metode yang dipilih secara real time. Kesalahan ini terjadi jika metode yang ditentukan tidak dieksekusi selama periode tunggu. Anda dapat mengklik ikon Refresh di sebelah kanan untuk mencoba lagi.
Mengapa ukuran survivor_space yang ditampilkan oleh Arthas separuh dari nilai sebenarnya?
Survivor_space dibagi menjadi dua bagian yang sama besar: from dan to. Arthas hanya menampilkan ukuran ruang from.
Apakah ada biaya tambahan untuk diagnostik Arthas?
Tidak, tidak ada biaya tambahan.
Setelah saya mengaktifkan Arthas di konsol ARMS, mengapa muncul pesan "connection refused" saat saya memasang Arthas secara manual?
Secara default, Arthas menggunakan port 3658 untuk menerima koneksi klien baru. Arthas yang terintegrasi dengan ARMS menggunakan port acak untuk menghindari konflik port ketika beberapa proses pada mesin yang sama memasang Arthas secara bersamaan. Hal ini dapat menyebabkan kegagalan pemasangan. Jika hal ini terjadi, Anda harus menonaktifkan fitur Arthas di konsol ARMS.
Setelah saya mengaktifkan Arthas di konsol ARMS, mengapa log menampilkan pesan "Arthas server already bind."?
Jika versi open source Arthas sebelumnya telah dipasang pada aplikasi, Anda tidak dapat mengaktifkan Arthas yang terintegrasi dengan ARMS. Anda harus terlebih dahulu menghapus Arthas open source, lalu mengaktifkan Arthas yang terintegrasi dengan ARMS.