Java诊断怎么搞?Arthas技能必不可少 您所在的位置:网站首页 java中super有什么用 Java诊断怎么搞?Arthas技能必不可少

Java诊断怎么搞?Arthas技能必不可少

2023-03-29 17:06| 来源: 网络整理| 查看: 265

最近有不少小伙伴私信我,问我能不能讲一个Java开发中常用的诊断工具。你们知道,我是很宠大家的。所以,今天我就带大家用10分钟时间,来学习一下我们在日常工作中常用的诊断工具,Arthas(阿尔萨斯)。

一.现有问题

在我们的日常开发中,如果在代码中遇到问题,我们可以使用DEBUG进行调试,追踪方法的执行过程,查看参数及返回值和报错信息等,并可以进行定位和解决问题。

但如果是在服务器上,或者是在进行前后端联调、预发及线上,没有IDE的环境,我们遇到了问题,又如何排查定位问题呢?

有的小伙伴会说,我们可以查看线上的项目日志!但如果是数据有问题呢?日志文件中也不可能全部都有记录。

另外如果某个接口执行过慢,该如何定位是哪个服务?哪个方法?那行代码的问题?处于整个请求链中哪一环?

有的小伙伴会说,可以在每个方法中都添加AOP切面,使用StopWatch来记录时间。但这就需要修改代码了,不方便!

有时代码明明修改了,但运行的结果却还是旧的,代码修复后似乎没有生效怎么办?

我们查看线上的仓库代码,发现代码确实是新的,但执行的似乎是旧的代码?如何确定运行的代码不一致?

或者现在线上出现了紧急问题,但又不能或没有权限立即上线更新,这该如何立即处理?

虽然Python、PHP等脚本语言可以直接修改线上代码,但Java如何做到热更新呢?

以上这些问题,想想都很头疼,如果你不知道该怎么解决,到了公司里面真的很难混的下去哦。

所以针对上面的问题,我要给大家介绍一款解决这些问题的利器--Arthas!那么Arthas具体能做什么呢?

二.Arthas概述

Arthas是Alibaba开源的Java诊断工具,也是目前最火的诊断工具之一。当我们遇到以下类似问题而束手无策时,Arthas都可以帮我们解决:

这个类是从哪个 jar包加载的?为什么会产生与各种类相关的 Exception?我修改的代码为什么没有执行?难道是我没 commit?分支搞错了?遇到问题无法在线上debug,难道只能通过加日志查看再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到JVM的实时运行状态?怎么快速定位应用的热点,生成火焰图?怎样直接从JVM内查找某个类的实例?

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供了丰富的 Tab 自动补全功能,方便进行问题的定位和诊断。

总之一句话:简单,好用,用河南话就是得劲,真中!

三.Arthas能做什么问题相关的命令追踪方法执行过程,查看参数及返回报错信息watch某个接口执行过慢,如何定位是哪个服务?哪个方法trace代码明明修改了,运行的结果还是旧的jad热更新jad/mc/redefine四.Arthas安装

1. 下载安装

下载arthas-boot.jar,然后用java -jar的方式启动:

下载地址:https://arthas.aliyun.com/arthas-boot.jar

2. 启动使用

启动完成后,arthas会检测系统中的java进程,需要手动输入应用名称对应的进程编号:

比如输入:4 回车看到下面的界面说明启动成功,已经进入arthas的命令模式,就可以使用命令操作arthas五.Arthas常用命令

5.1 dashboard命令

输入dashboard,按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行。

@RestController @RequestMapping(value={"daily"}) public class DailyController { private final DailyService dailyService; public DailyController(DailyService dailyService) { this.dailyService = dailyService; } @GetMapping(value={"view/{id}"}) public Response viewDailyById(@PathVariable(value="id") Integer id) { return Response.success((Object)this.dailyService.selectById(id)); } }

使用步骤:

双击选中需要跟踪的方法名;点击鼠标右键;在上下文代码中点击需要执行的命令,点击后剪贴板中就会有相关的命令;到arthas终端粘贴生成的命令。在IDEA插件市场中搜索安装【arthas idea】插件在需要根据的方法上点击右键在上下文代码中点击需要执行的命令到arthas终端粘贴生成的命令并执行

5.2 trace命令

跟踪方法内部的调用路径,并输出方法路径上每个节点上的耗时。

语法:trace 类的完整限定名 方法名作用:跟踪方法调用链上的耗时,可以有针对的检查代码进行优化!

5.3 watch命令

通过watch命令来查看函数的返回值、参数、异常信息。

语法:watch 类的完整限定名 方法名 {params表示参数,returnObj表示返回值,throwExp:表示抛出的异常}

作用:watch 命令可以查看所选方法的[参数,返回值和抛出的异常],返回没有异常时throwExp的值是null。

提示:写命令时,不需要全部都记着,使用 Tab键 可以自动补全类名、方法名、参数等。

可选参数含义-x 数值表示参看参数和返回对象时,把对象展开几层-n 数值表示跟踪几次请求

5.4 jad命令

下面就是使用jad命令,反编译出来的代码。

jad com.qf.daily.controller.DailyController

使用jad 后面跟上类的全限定名,反编译指定的类。

六. IDEA中的Arthas

第一步搜索插件

第二步使用插件

第三步使用命令

第四步粘贴命令并执行

好了,本篇文章到此就结束啦,现在你会用Arthas了吗?如果你还有任何问题,随时都可以给我私信哈。关注威哥,天天干货都不断!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有