萱草|又一款Java调试神器( 四 )
7、monitor 命令
监控类、方法的调用进行监控 , 调用次数、成功次数、失败次数、平均响应时长、失败率等 。
$ classloader #每种classloader加载类的个树 namenumberOfInstancesloadedCountTotalorg.springframework.boot.loader.LaunchedURLClassLoader14463com.taobao.arthas.agent.ArthasClassloader23631BootstrapClassLoader12961java.net.FactoryURLClassLoader1835sun.misc.Launcher$AppClassLoader146sun.reflect.DelegatingClassLoader4141sun.misc.Launcher$ExtClassLoader125Affect(row-cnt:7) cost in 7 ms.$ classloader -t# 类加载器间的层级关系+-BootstrapClassLoader+-sun.misc.Launcher$ExtClassLoader@1959f618+-com.taobao.arthas.agent.ArthasClassloader@5fc476c6+-com.taobao.arthas.agent.ArthasClassloader@5017e14b+-sun.misc.Launcher$AppClassLoader@5c647e05+-java.net.FactoryURLClassLoader@4ad317f0+-org.springframework.boot.loader.LaunchedURLClassLoader@20ad9418Affect(row-cnt:7) cost in 5 ms8、classloader 命令
将JVM中所有的类加载器统计出来 , 树状展示
$ classloader #每种classloader加载类的个树 namenumberOfInstancesloadedCountTotalorg.springframework.boot.loader.LaunchedURLClassLoader14463com.taobao.arthas.agent.ArthasClassloader23631BootstrapClassLoader12961java.net.FactoryURLClassLoader1835sun.misc.Launcher$AppClassLoader146sun.reflect.DelegatingClassLoader4141sun.misc.Launcher$ExtClassLoader125Affect(row-cnt:7) cost in 7 ms.$ classloader -t# 类加载器间的层级关系+-BootstrapClassLoader+-sun.misc.Launcher$ExtClassLoader@1959f618+-com.taobao.arthas.agent.ArthasClassloader@5fc476c6+-com.taobao.arthas.agent.ArthasClassloader@5017e14b+-sun.misc.Launcher$AppClassLoader@5c647e05+-java.net.FactoryURLClassLoader@4ad317f0+-org.springframework.boot.loader.LaunchedURLClassLoader@20ad9418Affect(row-cnt:7) cost in 5 ms# 实战案例
我在网上看到一个动态修改上线项目的案例 , 我觉得比较有意思 , 这里整理一下给大家分享一下 。
这个案例主要做了一件事情 , 在不停机不重启不重新发包的情况下 , 手动在代码中去掉抛异常代码 , 具体要修改的代码如下:
启动服务也达到我们预期异常
具体替换代码的流程如下:
1、jad:将需要更改的文件先进行反编译 , 保存下来, 编译器修改
$ jad --source--only com.example.demo.DemoApplication > /data/DemoApplication.java2、SC:查找当前类是哪个classLoader加载的
$ sc -d *DemoApplication | grep classLoaderclassLoaderHash20ad9418 #类加载器编号3、MC:用指定的classloader重新将类在内存中编译
$ mc -c 20ad9418 /data/DemoApplication.java -d /data Memory compiler output:/data/com/example/demo/DemoApplication.class4、redefine:将编译后的类加载到JVM , 上边编译后的.class文件地址
$ redefine /data/com/example/demo/DemoApplication.classredefine success, size: 1文件替换后我们再次访问一下程序 , 发现异常没有了程序已经是我们修改正确后的 , class文件替换成功
推荐阅读
- 广州恒大|中超转会又一条大鱼浮出水面,或遭三支球队疯抢,恒大成最大热门
- CPU|华为手机出现转机!又一款新机曝光:处理器亮了,联发科被解禁?
- 球会体育|或遭三支球队疯抢,恒大成最大热门,中超转会又一条大鱼浮出水面
- runningman|继《Running Man》后,刘在石又一档综艺陷入版权争议
- 歼-20|又一国看上国产战机,关键部位采用歼-20技术,一口气要采购40架
- |又一行正在“拖垮”年轻人!央行数据“警示”,人均负债超12万
- 机智玩机机|联发科被解禁?,华为手机出现转机!又一款新机曝光:处理器亮了
- 菠萝娱评1|爆款剧预定了,张嘉译又一都市剧开拍!演员班底堪称顶级配置
- 拉斯夫纪|颜值不输瑞虎8,配大7座油耗仅7L,又一良心合资
- 金圆说世界|若开战只用歼20够吗,大国又一王牌武器露面连美国都下令模仿
