空心|记 Arthas 实现一次 CPU 排查与代码热更新( 三 )
即:jad 类全路径 方法名 > 存储路径/存储名称
然后到 tmp 路径下 vi 修改 java 文件即可 , 修改完成之后 , 查看对应的 classloader 为编译做准备 。
sc -d *OrderController | grep classLoaderHashmc -c 17f052a3 /tmp/OrderController.java -d /tmp
但是这里编译出错了 , 官方提示:
所以我们本地编译好 class 文件 , 上传上去是一样的 。
编译前调用
[arthas@13190]$ trace com.arthas.controller.OrderController bigThreadPress Q or Ctrl+C to abort.Affect(class count: 1 , method count: 1) cost in 77 ms, listenerId: 2`---ts=2020-08-19 15:51:46;thread_name=http-nio-0.0.0.0-8080-exec-1;id=d;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@1f1c7bf6`---[6734.666529ms] com.arthas.controller.OrderController:bigThread() [throws Exception]+---[0.786517ms] com.arthas.service.ArthasService:test() #20`---throw:java.lang.OutOfMemoryError #-2 [unable to create new native thread]
更新前代码
@RequestMapping(value = "http://kandian.youth.cn/bigThread")@ResponseBodypublic String bigThread(int id) {ArthasService.test();while (true) {Thread t2 = new Thread();t2.start();id ++;if(100000 == id) {return String.valueOf(id);}}}
更新后代码
@RequestMapping(value = "http://kandian.youth.cn/bigThread")@ResponseBodypublic String bigThread(int id) {ArthasService.test();Thread t2 = new Thread();t2.start();return "success";}
编译指令
[arthas@13190]$ redefine /tmp/OrderController.classredefine success, size: 1, classes:com.arthas.controller.OrderController
编译后调用三次
`---ts=2020-08-19 15:52:02;thread_name=http-nio-0.0.0.0-8080-exec-3;id=f;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@1f1c7bf6`---[5.609405ms] com.arthas.controller.OrderController:bigThread()`---[0.204675ms] com.arthas.service.ArthasService:test() #20`---ts=2020-08-19 15:52:04;thread_name=http-nio-0.0.0.0-8080-exec-4;id=10;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@1f1c7bf6`---[3.900149ms] com.arthas.controller.OrderController:bigThread()`---[0.14636ms] com.arthas.service.ArthasService:test() #20`---ts=2020-08-19 15:52:04;thread_name=http-nio-0.0.0.0-8080-exec-5;id=11;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@1f1c7bf6`---[1.90945ms] com.arthas.controller.OrderController:bigThread()`---[0.147353ms] com.arthas.service.ArthasService:test() #20
可以发现时间从 6734.666529ms 变成 3ms 左右 , 说明热更新的代码生效了 。
推荐阅读
- 第一财经|8月外储实现五连升,双循环格局将继续支持规模总体稳定
- 【】前8个月我国外贸总值突破20万亿元 出口首次实现年内正增长
- 央视新闻客户端|前8月我国外贸总值突破20万亿 出口首次实现年内正增长
- 人民币|8月外储实现五连升,双循环格局将继续支持规模总体稳定
- 一味宠爱|最全盘点卡中国脖子的35项技术,折射中国工业水平的真实现状
- 上海宝山|实现加装电梯“零突破”!,罗店这个小区这样做
- 央视新闻客户端|前8个月我国外贸总值突破20万亿元 出口首次实现年内正增长
- 科内|意大利超级杯结束!科内实现3连冠,诺瓦拉全新阵容令人失望
- 智能垃圾分类小屋亮相服贸会 可实现一站式垃圾分类
- |《病患悖论》关注“过度医疗” 实现健康不是靠更多的医药