不停机不更新代码线上调试BUG的工具
如果你有以下痛点,请你查看本文章:
1、我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
2、遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
3、线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
4、是否有一个全局视角来查看系统的运行状况?
5、有什么办法可以监控到JVM的实时运行状态?
6、怎么快速定位应用的热点,生成火焰图?
Arthas-解决以上所有问题
一、快速启动,(我的第一给demo)
1、下载git代码,本地启动app应用
演示的源码
package com.eujian.arthaslearn.controller;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping
@RestController
public class ArthasController {
@GetMapping("/arthasGet")
public String arthasGet(String a,String b){
System.out.println("arthasGet");
System.out.println(String.format("a=%s,b=%s",a,b));
return a;
}
@GetMapping("/arthasTrace")
public String arthasTrace() throws InterruptedException {
Thread.sleep(100);
new MyService().send();
return "arthasTrace";
}
@PostMapping("/arthasInvote")
public ObjectNode arthasInvote(@RequestBody ObjectNode objectNode){
System.out.println("arthasInvote");
System.out.println(String.format("objectNode=%s",objectNode));
return objectNode;
}
}
package com.eujian.arthaslearn.controller;
public class MyService {
public String send(){
System.out.println("send被调用了");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "send";
}
}
github地址:xxxx
gitlab地址:xxx
启动应用
java -jar ./target/arthas-learn-1.0.0.jar
2、下载arthas的jar包(linux命令)
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
运行arthas结果
选择1然后回车
3、 查看dashboard
输入dashboard,按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行。
dashboard
4、通过thread命令来获取到app线程
通过thread 2获取线程id为1的线程
thread命令
5、通过jad来反编译Main Class
jad com.eujian.arthaslearn.controller.ArthasController
jad结果
6、watch某个函数的入参和出参
输入命令watch com.eujian.arthaslearn.controller.ArthasController arthasGet '{params[0],params[1],returnObj}'
用来监听ArthasController这个类的arthasGet方法
访问接口 curl localhost:8085/arthasGet?a=heetget&b=saas
监听结果
watch命令
7、trace命令 输出方法路径上的每个节点上耗时
输入 trace com.eujian.arthaslearn.controller.ArthasController arthasTrace
另外另个终端输入curl localhost:8085/arthasTrace
trace命令
不停机不更新代码线上调试BUG的工具的更多相关文章
- 线上调试bug
在以往的工作中,线上一有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话又要改,循环往复,要多麻烦就有多麻烦啊. 今天给 ...
- 分享下使用 svn,测试服务器代码自动更新、线上服务器代码手动更新的配置经验
分享下使用 svn,测试服务器代码自动更新.线上服务器代码手动更新的配置经验 利用SVN的POST-COMMIT钩子自动部署代码 Linux SVN 命令详解 Linux SVN 命令详解2 使用sv ...
- 测试老司机都在用的表白神器你会吗?-Fiddler之AutoResponse线上调试
一.Fiddler在线调试功能和表白神器介绍 在以往的工作中,线上有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话 ...
- 关于线上的bug什么时候修复的思考
这里系统专门指的是那种用户量大的系统,比如有几百万或者上千万的注册会员.因为小系统因为用户量少,不存在这种思考,考虑有时候是多余的.另外还有内部系统,给自己公司内部人员使用的,即便是出现了问题,也不会 ...
- 线上出bug了?别怕,这么定位!
摘要: Source Map还是很神奇的. 原文:线上出bug了?别怕,这么定位! 公众号:前端小苑 Fundebug经授权转载并修改,版权归原作者所有. 工作中,生产环境代码是编译后代码,搜集到报错 ...
- 被产品经理怼了,线上出Bug为啥你不知道
前言 前几天跟读者聊天,他说被产品经理给怼了.原因是线上出 Bug 了,最后是客户反馈才知道的. 我就问他:你们是不是没做监控? 读者:我们是刚成立的创业团队,目前最重要的就是堆功能,很多基础设施都没 ...
- 一个线上程序bug,由通用补数程序引起
下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...
- 调试工具-fiddler:本地资源替换线上调试
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这 ...
- svn利用钩子post-commit自动更新到线上测试服务器(测试中未验证)
创建一个新的版本库: [root@centos03 svn]# pwd /home/svn [root@centos03 svn]# svnadmin create webtest [root@cen ...
随机推荐
- 谈谈数据库的事务ACID
在数据库中新建一个字段并且设置为索引列,还有删除整张表的数据,类似这些操作都是一系列操作的组合,执行后不能出现中间状态,也就是不会出现新建了字段却不是索引的情况,也不会出现只有一部分数据被删除的情况. ...
- SQL审核平台Yearning部署
SQL审核平台Yearning部署 Yearning优势: Yearning SQL 审计平台 基于Vue.js与Django的整套mysql-sql审核平台解决方案.提供基于Inception的S ...
- vue-integer-plusminus
下载 vue-integer-plusminusvue-integer-plusminus 带有递增和递减按钮的整数输入 现场演示 该组件适合作为自旋按钮,允许键盘功能(向上/向下箭头或页面向上/向下 ...
- Prometheus 系列开篇:为什么要学 Prometheus ?
「Prometheus 系列开篇:为什么要学 Prometheus ?」首发于[陈树义]公众号,点击跳转到原文https://mp.weixin.qq.com/s/HCS6X3l6nVBw_hAnd6 ...
- 移动吉比特H2-2光猫超级用户与密码
移动吉比特H2-2光猫超级用户与密码 超级用户名CMCCAdmin 密码aDm8H%MdA----------------版权声明:本文为CSDN博主「BenSon.Album」的原创文章,遵循CC ...
- 【换根DP】小奇的仓库
题目背景 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 题目内容 喵星系有\(n\)个星球,星球以及星球间的航线形成一棵树. 从星球\(a\) ...
- JVM系列【6】GC与调优2.md
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 了解HotSpot常用命令行参数 JVM的命令行参数参考: https:/ ...
- frp 内网穿透远程桌面(Windows 10)配置
一.服务端配置 服务端需要公网环境,一般用一台云服务器就行了,我选择的是 Linux 服务器,Windows 服务器也是可以的. 下载 frp: wget https://github.com/fat ...
- Linux命令的执行
为什么在提示符下命令可以被执行呢? 执行命令过程 输入命令后回车,提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来 shell本身也是一个程序,只不过 ...
- git -- Authentication failed for 报错如何解决?
昨天拉代码拉不下来,报这个错误:fatal: Authentication failed for .... 有很多网上的解释是 $ git config --global --replace-all ...