arthas05-jvm相关命令总结

1 heapdump-生成dump文件

[arthas@4671]$ heapdump
Dumping heap to /var/folders/kt/nb8xgh3x1tz_r8ntr828mw500000gn/T/heapdump2020-03-08-11-271776578985687027698.hprof...
Heap dump file created
[arthas@4671]$

2 syspro-查看系统属性

这里查询的是一些启动参数,特别是jar -D启动时候配置的一些参数,都可以方便进行查询;

sysprop

3 sysenv-系统环境变量查看

查看系统环境信息;

4 sc-查看jvm加载类的详细信息

   sc -d org.apache.commons.lang.StringUtils
   sc -d org/apache/commons/lang/StringUtils
   sc -d *StringUtils
   sc -d -f org.apache.commons.lang.StringUtils
   sc -E org\\.apache\\.commons\\.lang\\.StringUtils
[arthas@4671]$ sc -d demo.MathGame
 class-info        demo.MathGame
 code-source       /Users/fwd/03-fwd_git/05-fly-higher-in-java/015-arthas/ope
                   ncode/arthas-demo.jar
 name              demo.MathGame
 isInterface       false
 isAnnotation      false
 isEnum            false
 isAnonymousClass  false
 isArray           false
 isLocalClass      false
 isMemberClass     false
 isPrimitive       false
 isSynthetic       false
 simple-name       MathGame
 modifier          public
 annotation
 interfaces
 super-class       +-java.lang.Object
 class-loader      +-sun.misc.Launcher$AppClassLoader@55f96302
                     +-sun.misc.Launcher$ExtClassLoader@1540e19d
 classLoaderHash   55f96302

5 sm - 查看jvm加载类的方法信息

	 sm -d demo.MathGame
   sm java.lang.String
   sm -d org.apache.commons.lang.StringUtils
   sm -d org/apache/commons/lang/StringUtils
   sm *StringUtils *
   sm -Ed org\\.apache\\.commons\\.lang\.StringUtils .*

6 dump - 从jvm输出类的字节码

   dump java.lang.String
   dump -d /tmp/output java.lang.String
   dump org/apache/commons/lang/StringUtils
   dump *StringUtils
   dump -E org\\.apache\\.commons\\.lang\\.StringUtils

7 jad - 反编译类文件

   jad java.lang.String
   jad java.lang.String toString
   jad --source-only java.lang.String
   jad -c 39eb305e org/apache/log4j/Logger
   jad -c 39eb305e -E org\\.apache\\.*\\.StringUtils

8 mc - 热更新代码之编译java生成class

Memory Compiler/内存编译器,编译.java文件生成.class

mc /tmp/Test.java

可以通过-c参数指定classloader:

mc -c 327a647b /tmp/Test.java

可以通过-d命令指定输出目录:

mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java

编译生成.class文件之后,可以结合redefine命令实现热更新代码。

9 redefine - 热更新代码之重新加载修改class

redefine命令实际上实现了任意代码线上debug的功能,可以随意本地修改代码重新编绎,然后线上redefine加载

redefine使用简介

注意, redefine后的原来的类不能恢复,redefine有可能失败(比如增加了新的field),参考jdk本身的文档。

reset命令对redefine的类无效。如果想重置,需要redefine原始的字节码。

redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果再执行上面提到的命令,则会把redefine的字节码重置。 原因是jdk本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值