Arthas — alijavin open-source alat za dijagnostiku Jave
Arthas je alijavin open-source alat za dijagnostiku Jave na produkciji; kroz globalni pregled može da prikaže podatke o stanju memorije, GC-a, niti itd. aplikacije, a omogućava i dijagnostiku poslovnih problema bez izmene koda, uključujući pregled argumenata pri pozivu metoda, vremena izvršenja, steka izuzetaka i sl., što znatno povećava efikasnost pronalaženja problema u produkcionom okruženju.
Zvanični sajt Arthasa jeste https://arthas.aliyun.com/doc/, a trenutno najnovija verzija jeste 3.7.2.

Mnogo je moćniji od komandnolinijskih alata i vizuelnih alata koje smo ranije predstavili; ukoliko ponovo naiđete na sledeće probleme, biće vam lako da ih rešite.
- Klijent prijavi problem na produkciji — kako ga ponovo izazvati? Da li da tražite od klijenta da još jednom klikne?
- Izuzetak je progutan i ne znate šta da radite — a kada pogledate ko je napisao taj kod, to ste zapravo vi sami!
- Pronalazite tuđi produkcioni bug, kod još niste ni razumeli, a nema ni jednog reda loga — znoj na dlanu!
- Na preliminarnom okruženju debugujete, pa kad malo potraje, u grupi se digla vika!
- Dodate log i ponovo rasporedite — pola sata ode, problem još nije nađen, a svetiljka iznad glave već odavno osvetljava ceo sprat......
- Na produkcionoj mašini ne možete da debugujete niti da otvorite debug port; da li će ponovno raspoređivanje narušiti trenutno stanje?
- Sumnjate na problem sa ulaznim argumentima, sumnjate na problem sa spajanjem koda, sumnjate da raspoređivanje nije uspelo — sve su upitnici......
- Ceo dan tražite jedan problem, pa vas grde da ste spori......
Čitaoci su neprestano tražili Arthas tutorijal, pa ćemo u ovom tekstu detaljno da ga obradimo.
Instalacija Arthasa
Instalacija na macOS
Isprobajmo ga najpre lokalno. Pošto je moj lokalni računar macOS, uzimaću macOS kao primer; korisnici Windowsa mogu pogledati zvaničnu dokumentaciju — veoma je jednostavno.
Na mom lokalnom računaru već je pokrenut projekat tehnička frakcija (paicoding), pa ćemo kao primer uzeti taj projekat i pogledati upotrebu Arthasa.

Zvanično preporučen način instalacije jeste putem arthas-boot-a, pa ćemo se držati njega:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jarNakon izvršenja gore navedenih komandi, Arthas će izlistati Java procese koje je moguće praćiti — na primer, drugi proces na donjoj slici [2]: 79209 com.github.paicoding.forum.web.QuickForumApplication jeste proces projekta tehnička frakcija; jednostavno unesite 2 i pritisnite Enter. Arthas će se povezati na taj proces, ispisati log sa Arthas oznakom i ući u interaktivno okruženje Arthas komandi.

Instalacija na Linuxu
Kada lokalno prođe, isprobajmo projekat na serveru; tehnička frakcija raspoređena je na Hong Kong server u Tencent Cloudu. Prvo se ulogujemo na server, a zatim izvršimo sledeću komadu da bismo preuzeli arthas-boot.jar:
curl -O https://arthas.aliyun.com/arthas-boot.jarZatim izvršimo java -jar arthas-boot.jar; Arthas će izlistati Java procese koje je moguće praćiti. Unesemo 1, pritisnemo Enter i Arthas će se povezati na proces tehničke frakcije, ispisati log sa Arthas oznakom i ući u interaktivno okruženje Arthas komandi.

OK, veoma je jednostavno, verujem da svako može da savlada.
IDEA Arthas dodatak
Arthas pruža i IDEA dodatak koji omogućava neposredno korišćenje Arthasa u IDEA-i, što je veoma zgodno; pogledajmo kako se instalira.

Zvanična dokumentacija:
Često korišćene komande Arthasa
Arthas pruža veoma mnogo komandi, na primer one vezane za JVM:
dashboard: prikaz podataka JVM-a u realnom vremenu, uključujući CPU, memoriju, GC, niti itd.jvm: prikaz podataka o JVM-u, uključujući JVM parametre, class loadere, podatke o klasama, podatke o nitima itd.sysprop: pregled i izmena sistemskih osobina JVM-a.vmoption: pregled i izmena parametara pri pokretanju JVM-a.heapdump: generisanje snimka memorije hipa, slično komandi jmap.
Na primer, vezane za učitavanje klasa:
sc: pregled podataka o klasama, uključujući strukturu klase, metode, polja itd.sm: pregled podataka o metodama, uključujući argumente metode, povratne vrednosti, izuzetke itd.
Na primer, vezane za pozive metoda:
tt: statistika broja poziva metoda i utrošenog vremena.trace: praćenje procesa poziva metoda, uključujući argumente metode, povratne vrednosti, izuzetke itd.monitor: praćenje procesa poziva metoda.
Provešću vas kroz neke od češće korišćenih komada; ostale komande možete naći u zvaničnoj dokumentaciji.
Komanda dashboard
Komanda dashboard može prikazati podatke JVM-a u realnom vremenu, uključujući niti, memoriju, runtime parametre itd.

Komanda thread
Komanda thread može prikazati podatke o nitima, uključujući stanja niti, stekove niti itd.

Argumenti komande thread su:
# ispisuje stek tri niti koje su trenutno najzauzetije
thread -n 3
# prikazuje stek niti sa ID-jem 1
thread 1
# pronalazi nit koja trenutno blokira druge niti
thread -b
# prikazuje niti sa zadatim stanjem
thread -state WAITINGKomanda sysprop
Komanda sysprop može prikazati i izmeniti sistemske osobine JVM-a.

Podržava dopunu komande pomoću TAB tastera~
Komanda logger
Komanda logger može prikazati i izmeniti nivo logovanja; ova komanda je veoma korisna.
Na primer, na produkciji se obično ne ispisuju logovi na DEBUG nivou, ali ponekad nam takvi logovi trebaju da bismo pronašli problem; tada možemo pomoću komande logger izmeniti nivo logovanja.
Prvi korak: najpre komandom logger pregledamo podrazumevani nivo logovanja:

Drugi korak: komandom logger --name ROOT --level DEBUG izmenimo nivo logovanja na DEBUG; ponovnim pregledom nivoa logovanja uviđamo da je izmena uspela:

Komanda sc
Komanda sc može prikazati podatke o klasama, uključujući strukturu klase, metode, polja itd.
Primer 1: komandom sc com.github.paicoding.forum.web.front.* pregledamo sve klase u paketu:

Primer 2: komandom sc -d com.github.paicoding.forum.web.front.home.IndexController pregledamo detaljne podatke o klasi:

Primer 3: komandom sc -d -f com.github.paicoding.forum.web.front.home.vo.IndexVo pregledamo podatke o poljima klase:

Komanda jad
Komanda jad može dekompilirati bytecode klase; ukoliko vam se učini da kod na produkciji ne odgovara očekivanom, možete ga dekompilirati i pregledati.
Primer 1: komandom jad com.github.paicoding.forum.web.front.home.IndexController dekompiliramo bytecode klase:

Komanda monitor
Komanda monitor može praćiti podatke o izvršenju metoda, uključujući utrošeno vreme i sl.
Primer 1: komandom monitor -c 3 com.github.paicoding.forum.web.front.home.IndexController index praćimo podatke o izvršenju metoda; argument -c označava broj praćenja:

Komanda watch
Komanda watch može posmatrati argumente i povratne vrednosti u procesu izvršenja metoda.
Primer 1: komandom watch com.github.paicoding.forum.web.front.home.IndexController index posmatramo argumente i povratne vrednosti u procesu izvršenja metoda:

Kratak pregled
Arthas je izuzetno moćan, a može se koristiti uz mnoge dodatke, kao što je Arthas IDEA dodatak koga smo malopre pomenuli; podržane komande obuhvataju i sledeće:

Dokumentacija je napisana vrlo celovito, pa neću dalje izlagati; ovaj tekst neka posluži samo kao povod za dalje istraživanje.

Kada ubuduće naiđete na produkcioni problem, iskoristićemo Arthas za konkretnu borbu i prošetaćemo vas kroz nju.
Preporučeno čitanje:
