首页 > 编程语言 >阿里开源项目Arthas,java开源诊断工具使用教程

阿里开源项目Arthas,java开源诊断工具使用教程

时间:2025-01-11 11:45:01浏览次数:1  
标签:java Arthas jar 开源 arthas 日志 方法

摘要:最近在项目中遇到一个问题,客户那边部署的项目线上出现了问题,需要远程调试,单凭log日志很难判断问题出现的原因,且无法进行远程debug调。,一开始是通过加日志的方式去排查问题,但日志加上之后还需要重新部署,这样来来回回部署了好几次,这方案非常浪费时间。了解到Arthas开源工具可以解决以上痛点,所以研究了一下简单的使用调试。

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

安装部署方式很简单,只需一条命令

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

运行截图如下,启动之后会出现你的服务器部署的jar包程序,可以输入数字序号选择要调试哪个jar程序。

 可能会出现端口占用情况:

原因:上一次选择进程进行连接没有正常退出,arthas会保存上一次监听进程,导致本次选择新进程进行连接时,与监听中记录的进程id不同,结果出现错误。

解决:继续选择上一个进程进行连接,执行成功后执行 stop 命令结束连接。再次启动arthas,选择新进程即可进行连接。

主要调试命令:

watch命令:

特别说明

watch 命令定义了4个观察事件点,即 -b 方法调用前,-e 方法异常后,-s 方法返回后,-f 方法结束后
4个观察事件点 -b、-e、-s 默认关闭,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
这里要注意方法入参和方法出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表方法入参外,其余事件都代表方法出参
当使用 -b 时,由于观察事件点是在方法调用前,此时返回值或异常均不存在

监听某个方法的返回值,如下图:

 监听某个方法的参数,如下图:

 线上环境可能会出现某个方法执行过于频繁,导致日志打印太多,不易查找日志的主要信息,此时可以开启保存到日志文件:

开启日志保存
arthas日志输出是默认关闭的,需要主动开启,开启步骤(前提需要启动Arthas)。

options save-result true

 

标签:java,Arthas,jar,开源,arthas,日志,方法
From: https://www.cnblogs.com/yylucky666/p/18665418

相关文章

  • HTML、CSS与JavaScript基础入门指南
    HTML、CSS与JavaScript基础入门指南在当今的互联网时代,网页开发已成为一项基础且重要的技能。本文将带你快速了解HTML、CSS和JavaScript的基础知识,帮助你构建简单的网页并实现基本的交互效果。一、HTML:网页的骨架HTML(HyperTextMarkupLanguage)是构建网页的基础语言。它通过标......
  • day01-Java入门-cnblog
    day01——Java基础入门Hello,各位小伙伴大家好,欢迎来到Java的世界,咱们正式开干!!!一、Java背景知识在正式开干之前,我们先了解一下Java的背景知识,方便以后你在和大家聊Java的时候可以说到一块去。1.1Java语言的历史Java是哪家公司的产品?Java是美国Sun(StanfordUniversityNe......
  • JAVA并发编程系列 (二)
             目录1.javastart如何调用到run方法?2.synchronized关键字的底层原理,synchronize锁是如何实现的?3.notify和notifyAll区别4.synchronize锁优化锁膨胀过程?5.AQS原理6.ReentrantLock和synchronized区别7.Lock高级功能?8.简述下CAS?9.int......
  • 咱们继续学Java——高级篇 第六十三篇:之XSLT转换示例程序全解析
    咱们继续学Java——高级篇第六十三篇:之XSLT转换示例程序全解析在Java编程的学习道路上,我们始终携手共进,不断深入探索知识的领域。此前我们学习了XSL转换(XSLT)的高级应用及在Java中的实现原理,今天我们将全面解析文档中的示例程序TransformTest,深入理解如何在Java中应用XSLT......
  • 02 Java基础
    注释定义:写代码时,随着项目变复杂要用到注释,注释是给写代码的人看的,且写注释是好习惯。类型:单行注释 //多行注释/*注释*/文档注释/**注释*/标识符关键字:Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符标识符注意点:标识符要......
  • Java基础:Iterator迭代器
    一、什么是Iterator:迭代器(Iterator)是一个对象,它的工作是遍历并目标序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素的方法,把访问逻辑从不同类型的集合类中抽象出来,又不必暴露该对象内部细节。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器......
  • Java异常处理
    1.异常:异常是错误,运行时出错(编译时可以通过),编译时异常就是敲代码的时候错误2.抛异常:创建一个错误对象,把错误对象丢出来3.捕获异常:默认由JVM来把错误信息进行捕获,在错误处停止运行,后面的正确代码不会再运行4.异常的分类:runtimeexception运行时异常其他exceptionerrorexcept......
  • Java怎样实现将数据导出为Word文档
    文章首发于我的博客:Java怎样实现将数据导出为Word文档-LiuZijian'sBlog我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求,导出为excel是比较简单的,因为excel有单元格来供我们定位数据位置,但是word文档的格式不像表格那样可以轻松的定位,......
  • SpringBoot3整合Swagger3时出现Type javax.servlet.http.HttpServletRequest not pres
    目录错误详情错误原因解决方法引入依赖修改配置信息 创建文件 访问 错误详情错误原因SpringBoot3和Swagger3版本不匹配解决方法使用springdoc替代springfox,具体步骤如下:引入依赖在pom.xml文件中添加如下依赖:<dependency><groupId>org.springdoc<......
  • 协同过滤算法绿色食品推荐系统|Java|SSM|VUE| 
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomca......