如果你有以下痛点,请你查看本文章:

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的工具的更多相关文章

  1. 线上调试bug

    在以往的工作中,线上一有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话又要改,循环往复,要多麻烦就有多麻烦啊. 今天给 ...

  2. 分享下使用 svn,测试服务器代码自动更新、线上服务器代码手动更新的配置经验

    分享下使用 svn,测试服务器代码自动更新.线上服务器代码手动更新的配置经验 利用SVN的POST-COMMIT钩子自动部署代码 Linux SVN 命令详解 Linux SVN 命令详解2 使用sv ...

  3. 测试老司机都在用的表白神器你会吗?-Fiddler之AutoResponse线上调试

    一.Fiddler在线调试功能和表白神器介绍 ​ 在以往的工作中,线上有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话 ...

  4. 关于线上的bug什么时候修复的思考

    这里系统专门指的是那种用户量大的系统,比如有几百万或者上千万的注册会员.因为小系统因为用户量少,不存在这种思考,考虑有时候是多余的.另外还有内部系统,给自己公司内部人员使用的,即便是出现了问题,也不会 ...

  5. 线上出bug了?别怕,这么定位!

    摘要: Source Map还是很神奇的. 原文:线上出bug了?别怕,这么定位! 公众号:前端小苑 Fundebug经授权转载并修改,版权归原作者所有. 工作中,生产环境代码是编译后代码,搜集到报错 ...

  6. 被产品经理怼了,线上出Bug为啥你不知道

    前言 前几天跟读者聊天,他说被产品经理给怼了.原因是线上出 Bug 了,最后是客户反馈才知道的. 我就问他:你们是不是没做监控? 读者:我们是刚成立的创业团队,目前最重要的就是堆功能,很多基础设施都没 ...

  7. 一个线上程序bug,由通用补数程序引起

    下游发现接口可用率非100%,马上线上查看,发现数据在有些情况下通用补数的数据是空, 有20%的用户是没有相应偏好等的数据的,需要通用补数来补数,结果通用补数没有数据. 通用补数数据的检查报警时必须要 ...

  8. 调试工具-fiddler:本地资源替换线上调试

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这 ...

  9. svn利用钩子post-commit自动更新到线上测试服务器(测试中未验证)

    创建一个新的版本库: [root@centos03 svn]# pwd /home/svn [root@centos03 svn]# svnadmin create webtest [root@cen ...

随机推荐

  1. Charles 模拟弱网

    1.Charles安装方法: 1)在官网下载安装: 2)输入如下注册码破解,Charles 4.2.7 目前版本,可用. Registered Name: https://zhile.io       ...

  2. Docker开启远程连接,本地IDEA使用docker插件连接(不认证的版本和认证的版本都有)

    前言 在学校学习的时候,要部署一个Java程序,一般是打成war包,放到服务器上的tomcat的webapp里面去: 后来SpringBoot出现内置了tomcat,就直接打成jar包,丢到服务器任何 ...

  3. day56 Pyhton 前端Jquery08

    前端 内容回顾: -BOM -jquery介绍 -jquery下载和引入方式 npm install jquery -jquery的选择器 -基本选择器 -通配符选择器 - id选择器 - 类选择器 ...

  4. Hybrid App中原生页面 VS H5页面

    Hybrid App中原生页面 VS H5页面   现有3类主流APP,分别为:Web App.Hybrid App(混合模式移动应用,Hybrid有"混合的"意思). Nativ ...

  5. 编程语言拟人:来自C++、Python、C语言的“傲娇”自我介绍!

    软件工程领域,酷爱编程的人很多,但另一些人总是对此避之不及.而构建软件无疑会让所有人压力山大,叫苦连连.   来看看这些流行编程语言的"内心独白",JAVA现实,C++傲娇,Rus ...

  6. 扫描仪扫描文件处理-ABBYY自动矫正图像歪斜

    修改界面语言: 设置为不识别图片文字(因为我们只需要把图片歪斜校正): 保存无损彩色格式:

  7. logstash-安装

    1.下载   cd /usr/local/src   wget https://mirrors.huaweicloud.com/logstash/7.8.0/logstash-7.8.0.tar.gz ...

  8. go 结构体函数

    package main import "fmt" type Dog struct { Name string } func (d *Dog) speak() string { r ...

  9. go panic

    panic 抛出异常 通过recover捕获 类似 php python等语言的try catch package mainimport ( "fmt" "errors& ...

  10. VIM 批量注释的两种方法 (转)

    方法一 ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift+i),再插入注释符,比如"//",再按Esc,就会全部注释了 批 ...