Skip to main content

Arthas线上排查经验

作草分茶Less than 1 minute

Arthas线上排查经验

介绍

Arthas 是 Alibaba 开源的 Java 诊断工具。

官网地址open in new window

快速安装

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar --repo-mirror aliyun --use-http

连接已启动的arthas

telnet localhost 3658

常用场景

反编译源码

jad com.example.test

执行静态代码

比如要看看临时目录路径

System.getProperty("java.io.tmpdir")

那么需要先获取java.lang.System的类加载器hashcode,然后再执行代码

指定类加载器

使用-c {hashcode}指定类加载器,如果是Bootstrap可以不指定。

因为hashcode不是固定的,所以用--classLoaderClass {classLoaderClassName}指定类加载器可以保证唯一。

[arthas@1]$ sc -d java.lang.System
 class-info        java.lang.System                                                                                                                                                                                                        
 code-source                                                                                                                                                                                                                               
 name              java.lang.System                                                                                                                                                                                                        
 isInterface       false                                                                                                                                                                                                                   
 isAnnotation      false                                                                                                                                                                                                                   
 isEnum            false                                                                                                                                                                                                                   
 isAnonymousClass  false                                                                                                                                                                                                                   
 isArray           false                                                                                                                                                                                                                   
 isLocalClass      false                                                                                                                                                                                                                   
 isMemberClass     false                                                                                                                                                                                                                   
 isPrimitive       false                                                                                                                                                                                                                   
 isSynthetic       false                                                                                                                                                                                                                   
 simple-name       System                                                                                                                                                                                                                  
 modifier          final,public                                                                                                                                                                                                            
 annotation                                                                                                                                                                                                                                
 interfaces                                                                                                                                                                                                                                
 super-class       +-java.lang.Object                                                                                                                                                                                                      
 class-loader                                                                                                                                                                                                                              
 classLoaderHash   null                                                                                                                                                                                                                    

Affect(row-cnt:1) cost in 39 ms.

[arthas@1]$ ognl '@java.lang.System@getProperty("java.io.tmpdir")'
@String[/tmp]