首页 > 其他分享 >【Arthas】使用 watch命令 线上诊断

【Arthas】使用 watch命令 线上诊断

时间:2022-11-11 12:31:08浏览次数:67  
标签:20 App watch 线上 Arthas Integer liyao ArrayList


如果debug线上环境但是又没有加日志,怎么办?可以使用arthas的watch命令来诊断。

测试程序:

/**
* Hello world!
*
*/

public class App
{
private List<Integer> p = new ArrayList<Integer>();
private static int num = 0;

private List<Data> get(){
p.add(0, num++);
Data data1 = new Data();
data1.map.put("key1", 1);
data1.map.put("key2",2);
data1.age = 10;
data1.name = "liyao";

Data data2 = new Data();
data2.map.put("key3",3);
List<Data> data = new ArrayList<Data>();
data.add(data1);
data.add(data2);
return data;
}

private void run(){
for (int i = 0; i < 1000000000; i++) {
try {
Thread.sleep(5000);
System.out.println(get());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main( String[] args ) throws IOException {

new App().run();
}
}

watch命令:

watch 全限定类名 方法名 观察点 参数

观察点:arthas定义了一系列的观察点:

​https://alibaba.github.io/arthas/advice-class.html​

常用的有:

target:调用方法的对象实例

params:方法参数

returnObj:返回值,如果有的话

returnExp:异常,如果有的话

如果只有一个观察点,可以直接写,比如:

watch com.liyao.App get returnObj

如果有多个,需要使用ognl表达式,放在”{}“里,使用,分割。

watch com.liyao.App get "{params,returnObj}"

参数:

有一个很常用的-x n,指定观察点的展开的层数,默认为1。如果我们想要观察对象内部的属性时,使用这个参数会很方便,不需要实现toString方法。

上面的例子:

不加-x参数:

$ watch com.liyao.App get "{returnObj, target}"
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 43 ms.
ts=2019-07-20 20:00:35; [cost=2.105606ms] result=@ArrayList[
    @ArrayList[isEmpty=false;size=2],
    @App[com.liyao.App@5680a178],
]
ts=2019-07-20 20:00:40; [cost=0.235734ms] result=@ArrayList[
    @ArrayList[isEmpty=false;size=2],
    @App[com.liyao.App@5680a178],
]

只显示了一层。如果想看里面的属性,可以使用-x参数,比如-x 3:

ts=2019-07-20 20:03:53; [cost=0.925101ms] result=@ArrayList[
    @App[
        p=@ArrayList[
            @Integer[7],
            @Integer[6],
            @Integer[5],
            @Integer[4],
            @Integer[3],
            @Integer[2],
            @Integer[1],
            @Integer[0],
        ],
        num=@Integer[8],
    ],
    @ArrayList[
        @Data[
            map=@HashMap[isEmpty=false;size=2],
            name=@String[liyao],
            age=@Integer[10],
        ],
        @Data[
            map=@HashMap[isEmpty=false;size=1],
            name=null,
            age=@Integer[0],
        ],
    ],
]

很方便。

标签:20,App,watch,线上,Arthas,Integer,liyao,ArrayList
From: https://blog.51cto.com/u_15873544/5844605

相关文章

  • Vue3 的watch 监视属性
    1.监听单个watch(变量,(新值,老值)=>{})2.监听多个watch([变量1,变量2],(新值,老值)=>{})3.监听对象watch(()=>对象,(新值)=>{})4.监听对象属性watch(()=>对象.......
  • vue 项目使用 charles 代理线上页面到本地后显示404
    背景某app嵌入了航管的H5页面,在测试过程中,发现其中一个页面白屏。最简单的方案就是代理到本机,看看到底是哪里的bug。线上链接:https://wtest.133.cn/hangban/vue/jipiao/h......
  • 【luffy】协同开发,冲突解决,线上分支合并,pycharm操作git,前端首页组件编写,首页轮播图功
    目录1.协同开发2.冲突解决2.1多人同一分支开发出现冲突2.2分支合并出现冲突3.线上分支合并(pr,mr)4.pycharm操作git4.1clone4.2gitadd4.3gitcommit4.4gitpull......
  • OpenMLDB 线上引擎资源需求预估模型,助你快速预估资源消耗
    一、背景OpenMLDB线上计算的最大优势为可以低延迟(毫秒级)高效处理实时特征计算请求。其中,为了达到低延迟,OpenMLDB默认使用了基于内存的存储引擎。但是,当业务增长时,对于内......
  • 直播预告 | 第四范式Tech Day火热来袭,OpenMLDB 与你 8月11日线上见
    如今,人工智能已经成为各行各业不可或缺的基础设施。业界对于技术的关注热点已经从仅关注算法和模型本身,逐步变为了广泛讨论AI如何深度赋能企业创新应用、AI如何支撑企业更......
  • 线上问题解决
    1.服务重启2.部署回滚3.限流降级利用日志和故障现场保留的dump文件等进行根因分析;修复故障后在测试环境进行验证,确认没问题后再发布到生产环境;记录故障从发生到彻底......
  • 20220807 04. 首次登陆与线上求助
    4.1首次登陆系统s一般来说,我们不建议您直接使用root的身份登陆系统喔!请使用一般帐号登陆!等到有需要修改或者是创建系统相关的管理工作时,才切换身份成为root!为什么......
  • 如何做好线上服务质量保障
    昨天下午星球有同学问了一个问题:目前业内高可用部署主要采用方案?看到这个问题,我的第一反应是问题太宽泛,不够明确。我反问了她一个问题:“你需要什么高可用?业务高可用?服务......
  • 微信小程序使用watch监听数据变化的方法
    众所周知,Vue中,可以使用监听属性watch来观察和响应Vue实例上的数据变化,那么小程序能不能实现这一点呢?监听器的原理,是将data中需监听的数据写在watch对象中,并给其提供一......
  • 10.14:线上直播问题汇总答疑
    https://www.cnblogs.com/imyalost/p/15422896.html上周四(10月14日)晚,受邀参加了由数列科技主办的线上技术直播——PGUG系列-大促保障之旅,其中我分享的Topic是《大型业务活......