专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
Java编程精选  ·  Controller层代码这么写,简洁又优雅! ·  昨天  
Java编程精选  ·  字节员工自曝:在强调一遍OD ... ·  2 天前  
Java编程精选  ·  雷军删文,热搜第一! ·  3 天前  
51好读  ›  专栏  ›  芋道源码

学会 arthas,让你 3 年经验掌握 5 年功力!

芋道源码  · 公众号  · Java  · 2025-05-09 19:20

主要观点总结

文章介绍了Arthas,一个由阿里巴巴开源的Java诊断工具,用于动态跟踪Java代码、实时监控JVM状态。文中还介绍了Arthas的一些基本用法,如stack、jad、sc、watch、trace、jobs、logger、dashboard和redefine等命令,以及这些命令的用途和参数说明。同时,文章还提到了一些高级功能,并建议读者加入知识星球以获取更多帮助。

关键观点总结

关键观点1: Arthas介绍

Arthas是一个由阿里巴巴开源的Java诊断工具,用于动态跟踪Java代码、实时监控JVM状态。

关键观点2: Arthas基本用法

文中介绍了Arthas的一些基本用法,包括stack、jad、sc、watch、trace、jobs、logger、dashboard和redefine等命令,以及这些命令的用途和参数说明。

关键观点3: 高级功能

文中提到了一些Arthas的高级功能,如热更新类和查看当前系统的实时数据面板等。

关键观点4: 加入知识星球

文章鼓励读者加入知识星球,以获取更多关于项目实战、面试招聘、源码解析和学习路线等方面的帮助。


正文

请到「今天看啥」查看全文


参数说明
class-pattern
类名表达式匹配
method-pattern
方法名表达式匹配
[arthas@79952]$ stack com.baomidou.mybatisplus.extension.service.IService getOne
Press Q or Ctrl+C to abort.
Affect(class-cnt:202 , method-cnt:209) cost in 10761 ms.
ts
=2019-11-13 11:49:13;thread_name=http-nio-8801-exec-6;id=2d;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@a6c54c3
    @com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne()
        at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:230)
        ...... ......
        at cn.test.mobile.controller.order.OrderController.getOrderInfo(OrderController.java:500)

可以看到OrderController.java的第500行调用了这个getOne接口。

注意这个命令需要调用后才会触发日志,相似的还有watch、trace等

2、jad

反编译指定已加载类的源码

有时候,版本发布后,代码竟然没有执行,代码是最新的吗,这时可以使用jad反编译相应的class。

jad cn.test.mobile.controller.order.OrderController

仅编译指定的方法

jad cn.test.mobile.controller.order.OrderController getOrderInfo

ClassLoader:
@RequestMapping(value={"getOrderInfo"}, method={RequestMethod.POST})
public Object getOrderInfo(HttpServletRequest request, @RequestBody Map map) {
    ResponseVo responseVo = new ResponseVo();
    ... ... ...  ...

3、sc

“Search-Class” 的简写 ,查看JVM已加载的类信息 有的时候,你只记得类的部分关键词,你可以用sc获取完整名称 当你碰到这个错的时候“ClassNotFoundException”或者“ClassDefNotFoundException”,你可以用这个命令验证下

参数名称
参数说明
class-pattern
类名表达式匹配
method-pattern
方法名表达式匹配
[d]
输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息。如果一个类被多个ClassLoader所加载,则会出现多次

模糊搜索

sc *OrderController*
cn.test.mobile.controller.order.OrderController

打印类的详细信息 sc -d

sc -d cn.test.mobile.controller.order.OrderController

 class-info        cn.test.mobile.controller.order.OrderController
 code-source       /F:/IDEA-WORKSPACE-TEST-qyb/trunk/BE/mobile/target/classes/
 name              cn.test.mobile.controller.order.OrderController
 isInterface       false
 isAnnotation      false
 isEnum            false
 isAnonymousClass  false
 isArray           false
 isLocalClass      false
 isMemberClass     false
 isPrimitive       false
 isSynthetic       false
 simple-name       OrderController
 modifier          public
 annotation        org.springframework.web.bind.annotation.RestController,org.springframework.web.bind.annotation.Requ
                   estMapping
 interfaces
 super-class       +-cn.test.mobile.controller.BaseController
                     +-java.lang.Object
 class-loader      +-sun.misc.Launcher$AppClassLoader@18b4aac2
                     +-sun.misc.Launcher$ExtClassLoader@480bdb19
 classLoaderHash   18b4aac2

与之相应的还有sm( “Search-Method” ),查看已加载类的方法信息

查看String里的方法

sm java.lang.String
java.lang.String ([BII)V
java.lang.String ([BLjava/nio/charset/Charset;)V
java.lang.String ([BLjava/lang/String;)V
java.lang.String ([BIILjava/nio/charset/Charset;)V
java.lang.String ([BIILjava/lang/String;)V
... ... ... ...

查看String中toString的详细信息

sm -d java.lang.String toString
declaring-class  java.lang.String
 method-name      toString
 modifier         public
 annotation
 parameters
 return           java.lang.String
 exceptions
 classLoaderHash  null

4、watch

可以监测一个方法的入参和返回值

有些问题线上会出现,本地重现不了,这时这个命令就有用了

参数名称






请到「今天看啥」查看全文