安装#
Copy
java -jar arthas-boot.jar
查看版本:#
Copy
D:\Program Files\arthas $ java -jar arthas-boot.jar -version [INFO] arthas-boot version: 3.1.0 Local versions: 3.1.0 Remote versions: 3.1.0 3.0.5 3.0.4 3.0.3 3.0.0-RC 3.0.5
命令使用#
启动arthas#
Copy
E:\BaiduYunDownload\arthas-packaging-3.1.0-bin $ java -jar arthas-boot.jar [INFO] arthas-boot version: 3.1.0 [INFO] Found existing java process, please choose one and hit RETURN. * [1]: 22596 org.jetbrains.idea.maven.server.RemoteMavenServer [2]: 20728 org.apache.catalina.startup.Bootstrap [3]: 29752 com.shitou.Application [4]: 37144 [5]: 15660 org.jetbrains.jps.cmdline.Launcher 3 [INFO] arthas home: E:\BaiduYunDownload\arthas-packaging-3.1.0-bin [INFO] Try to attach process 29752 [INFO] Found java home from System Env JAVA_HOME: D:\Program Files\Java\jdk1.8.0 [INFO] Attach process 29752 success. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ''--. .--'| '--' | / O \ ' .-' | .-. || '--'.' | | | .--. || .-. |`. `-. | | | || |\ \ | | | | | || | | |.-' | `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' wiki: https://alibaba.github.io/arthas version: 3.1.0 pid: 29752 time: 2019-03-20 18:21:26
查看dashboard#
Copy
ID NAME GROUP PRIORIT STATE %CPU TIME INTERRU DAEMON 67 Abandoned connection clea main 5 TIMED_WA 0 0:0 false true 128 AsyncAppender-Worker-arth system 5 WAITING 0 0:0 false true 6 Attach Listener system 5 RUNNABLE 0 0:0 false true 65 ContainerBackgroundProces main 5 TIMED_WA 0 0:0 false true 122 DestroyJavaVM main 5 RUNNABLE 0 0:52 false false 68 Druid-ConnectionPool-Crea main 5 WAITING 0 0:0 false true 69 Druid-ConnectionPool-Dest main 5 TIMED_WA 0 0:0 false true 92 DubboClientReconnectTimer main 5 WAITING 0 0:0 false true 96 DubboClientReconnectTimer main 5 TIMED_WA 0 0:0 false true 79 DubboRegistryFailedRetryT main 5 TIMED_WA 0 0:0 false true 125 DubboResponseTimeoutScanT main 5 TIMED_WA 0 0:0 false true 83 DubboSaveRegistryCache-th main 5 WAITING 0 0:0 false true Memory used total max usage GC heap 160M 320M 4050M 3.96% gc.parnew.count 155 par_eden_space 5M 68M 266M 2.17% gc.parnew.time(ms) 1154 par_survivor_space 711K 8704K 34048K 2.09% gc.concurrentmarksweep.co 7 cms_old_gen 153M 243M 3751M 4.10% unt nonheap 171M 180M -1 94.88% gc.concurrentmarksweep.ti 429 code_cache 25M 25M 240M 10.77% me(ms) Runtime os.name Windows 10 os.version 10.0 java.version 1.8.0_201 java.home D:\Program Files\Java\jdk 1.8.0\jre systemload.average -1.00
数据说明#
- ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
- NAME: 线程名
- GROUP: 线程组名
- PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
- STATE: 线程的状态
- CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
- TIME: 线程运行总时间,数据格式为
分:秒 - INTERRUPTED: 线程当前的中断位状态
- DAEMON: 是否是daemon线程
thread:线程信息#
显示所有线程信息#
Copy
$ thread Threads Total: 80, NEW: 0, RUNNABLE: 23, BLOCKED: 0, WAITING: 33, TIMED_WAITING: 24, TERMINATED: 0 ID NAME GROUP PRIORIT STATE %CPU TIME INTERRU DAEMON 67 Abandoned connection clea main 5 TIMED_WA 0 0:0 false true 128 AsyncAppender-Worker-arth system 5 WAITING 0 0:0 false true 6 Attach Listener system 5 RUNNABLE 0 0:0 false true 65 ContainerBackgroundProces main 5 TIMED_WA 0 0:0 false true 122 DestroyJavaVM main 5 RUNNABLE 0 0:52 false false 68 Druid-ConnectionPool-Crea main 5 WAITING 0 0:0 false true 69 Druid-ConnectionPool-Dest main 5 TIMED_WA 0 0:0 false true 92 DubboClientReconnectTimer main 5 WAITING 0 0:0 false true 96 DubboClientReconnectTimer main 5 TIMED_WA 0 0:0 false true
显示当前最忙的前n个线程,并打印出堆栈#
Copy
$ thread -n 3 "Reference Handler" Id=2 cpuUsage=0% WAITING on java.lang.ref.Reference$Lock@5889e097 at java.lang.Object.wait(Native Method) - waiting on java.lang.ref.Reference$Lock@5889e097 at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "Finalizer" Id=3 cpuUsage=0% WAITING on java.lang.ref.ReferenceQueue$Lock@2c5e60e3 at java.lang.Object.wait(Native Method) - waiting on java.lang.ref.ReferenceQueue$Lock@2c5e60e3 at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216) "Signal Dispatcher" Id=5 cpuUsage=0% RUNNABLE
查看指定线程的堆栈信息#
Copy
$ thread 2 "Reference Handler" Id=2 WAITING on java.lang.ref.Reference$Lock@5889e097 at java.lang.Object.wait(Native Method) - waiting on java.lang.ref.Reference$Lock@5889e097 at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) Affect(row-cnt:0) cost in 56 ms.
找出当前阻塞其他线程的线程#
Copy
$ thread -b No most blocking thread found! Affect(row-cnt:0) cost in 68 ms.
指定采样时间间隔#
Copy
$ thread -n 3 -i 10000 "File Watcher" Id=101 cpuUsage=88% TIMED_WAITING at java.lang.Thread.sleep(Native Method) at org.springframework.boot.devtools.filewatch.FileSystemWatcher$Watcher.scan(FileSystemWatcher.java:249) at org.springframework.boot.devtools.filewatch.FileSystemWatcher$Watcher.run(FileSystemWatcher.java:2

Arthas是一款强大的Java应用诊断工具,提供了丰富的命令用于应用的实时状态监控、方法耗时分析、线程与锁信息分析、依赖分析、JVM诊断等功能。本文详细介绍了Arthas的安装、启动及常用命令的使用,包括线程分析、方法调用跟踪、内存监控等,帮助开发者快速定位和解决Java应用中的各种问题。
最低0.47元/天 解锁文章
6211

被折叠的 条评论
为什么被折叠?



