当前位置: 首页 > 后端技术 > Java

线上项目无法调试BUG?这款阿里巴巴开源诊断工具自带IDEA插件,真香!

时间:2023-04-01 15:12:28 Java

记得之前写过一篇Arthas的使用教程。通过使用Arthas,我们可以同时实现在线调试和热修复。最近浏览了Arthas的官网,发现它已经支持直接集成到SpringBoot应用中,并且还有专门的IDEA插件。今天我们再体验一下,看看它的功能是不是更强大!SpringBoot实战电商项目商城(50k+star)地址:https://github.com/macrozheng/mallArthas简介Arthas是阿里巴巴开源的Java诊断工具,深受开发者喜爱,目前在Github上有29K+star。采用命令行交互方式,提供丰富的Tab自动补全功能,进一步方便问题定位和诊断。为了演示更真实的线上环境,ArthasTunnel接下来会对Docker容器中的SpringBoot应用进行诊断。我们将使用ArthasTunnel来实现它。ArthasTunnel相当于一个网页控制台。使用它,我们可以在不进入应用容器的情况下对应用进行诊断,非常方??便。首先我们需要下载ArthasTunnel的安装包,下载地址:https://github.com/alibaba/ar...由于官方只提供了JAR包,如果想通过Docker启动,可以自己打包Docker镜像,打包使用的Dockerfile脚本如下:#镜像需要依赖的基础镜像FROMjava:8#将当前目录下的jar包复制到docker容器的/目录下ADDarthas-tunnel-server.jar/arthas-tunnel-server.jar#声明服务运行的端口EXPOSE80807777#指定docker容器启动时运行的jar包ENTRYPOINT["java","-jar","/arthas-tunnel-server.jar"]#这里再次指定维护者MAINTAINER宏的名称提供一键打包运行ArthasTunnel容器的执行脚本run.sh。脚本内容如下;#!/usr/bin/envbash#定义应用组名group_name='mall-tiny'#定义应用名app_name='arthas-tunnel-server'#定义应用版本app_version='1.0-SNAPSHOT'echo'----copyjar----'dockerstop${app_name}echo'----stopcontainer----'dockerrm${app_name}echo'----rmcontainer----'dockerrmi${group_name}/${app_name}:${app_version}echo'----rmimage----'#打包编译docker镜像dockerbuild-t${group_name}/${app_name}:${app_version}.echo'----buildimage----'dockerrun-p8080:8080-p7777:7777--name${app_name}\-eTZ="Asia/Shanghai"\-v/etc/位置altime:/etc/localtime\-v/mydata/app/${app_name}/logs:/var/logs\-d${group_name}/${app_name}:${app_version}echo'----启动容器----'接下来将ArthasTunnel的JAR包、Dockerfile和执行脚本run.sh上传到Linux服务器,然后使用./run.sh命令运行;运行成功后,可以直接访问ArthasTunnel的web控制站,访问地址:http://192.168.3.105:8080SpringBoot集成在SpringBoot应用中直接集成使用Arthas无疑是最方便的,接下来我们将使用这种方式首先在项目的pom.xml中添加如下依赖。可以对比一下Arthas教程中的使用方法,直接集成确实简单很多;com.taobao.arthasarthas-spring-boot-starter3.6.1然后修改配置文件application.yml,记住这个agent-id,需要使用ArthasTunnel连接。由于我们会将应用容器通过--link连接到ArthasTunnel容器,所以这里的tunnel-server配置如下;management:endpoints:web:exposure:#暴露端点`/actuator/arthas`include:'arthas'arthas:agent-id:mall-tiny-arthastunnel-server:ws://arthas-tunnel-server:7777/ws接下来通过前面的Dockerfile和run.sh打包应用,run.sh和前面的相比,只是多了一条命令,通过--link连接到ArthasTunnel容器;示例代码中已经包含了用于打包的Dockerfile和运行脚本run.sh,结构如下;接下来,在ArthasTunnelweb控制台中输入AgentId对于mall-tiny-arthas,点击Connect按钮开始诊断Java应用程序;例如,使用dashboard命令显示当前系统的实时数据面板,包括线程信息、JVM内存信息和JVM运行时参数;再比如使用thread命令查看当前线程信息,查看线程栈,可以找出当前占用CPU最多的线程;当然,阿尔萨斯非常强大,而且远不止于此。支持动态修改日志、热更新等,具体请参考Arthas使用教程。IDEA插件因为Arthas非常强大,需要记住的命令很多,有时根本记不住,所以就有了这个IDEA插件,主要用来帮助生成Arthas命令。直接在IDEA的插件市场搜索arthas找到插件,然后点击安装;安装完成后,我们来说说如何使用。比如当我们觉得网上的代码和预期的不一致时,我们可以使用jad命令反编译看看,直接选择类,右键选择Arthas命令然后选择Jad进行反编译;这时候命令会直接复制到剪贴板,然后在ArthasTunnel上右击粘贴使用,比手写命令方便多了!如果想观察方法执行过程中的参数和返回值,可以使用watch命令,选中要观察的方法右键选择;这里观察Controller中方法的执行过程;我们也可以单独修改某个类的日志级别,选择类名右键选择logger命令;先复制loggersc命令查看当前类的日志级别是否为INFO;复制ClassLoader的Hash值,因为在Linux中与Ctrl+C键有冲突,所以使用Ctrl+InsertCombine复制;然后输入ClassLoader的Hash值,修改日志级别,然后复制修改日志级别的命令;执行后查看日志级别,已经改为DEBUG级别。小结今天体验了新版本的Arthas。配合ArthasTunnel和IDEA插件使用真的很方便!而且还可以和SpringBoot无缝集成,实在是太强大了。Arthas的更多用法,请参考Arthas教程。参考项目官网:https://github.com/alibaba/ar...Arthas官方文档:https://arthas.aliyun.com/doc...IDEA插件使用文档:https://www.yuque。com/arthas-...项目源码地址https://github.com/macrozheng...