Java开源工具库使用之线上监控诊断库Arthas

news2024/12/23 9:37:44

文章目录

  • 前言
  • 一、介绍
    • 1.1 功能
    • 1.2 原理
  • 二、安装使用
    • 2.1 下载
    • 2.2 使用
  • 三、常用
    • 3.1 实时查看
    • 3.2 追踪查看
    • 3.3 辅助命令
    • 3.4 热更新
    • 3.5 监控
  • 四、实战
    • 4.1 CPU/内存占用过高
    • 4.2 接口耗时高
    • 4.3 找到类所在jar
    • 4.4 查找类的实例
    • 4.5 生成火焰图
  • 参考

前言

在现代软件开发中,应用程序的监控和调试是非常重要的环节。特别是在复杂的 Java 应用程序中,排查问题、优化性能和定位异常往往成为开发者的一项挑战。针对这个问题,阿里巴巴开发了一款强大而灵活的 Java 诊断工具,名为 Arthas

Arthas 框架被誉为"Java开发者的神器",它旨在帮助开发者实时监控和深入调试 Java 应用程序,提供了丰富的功能和便捷的操作。无论是在开发、测试还是生产环境中,Arthas 都能够以低侵入性的方式提供全面的应用程序观测和问题诊断能力。

  • github: https://github.com/alibaba/arthas
  • 官网:https://arthas.aliyun.com/

Arthas支持 JDK 6+,支持 Linux/Mac/Windows ,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断,当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

在本篇博文中,我们将全面介绍 Arthas 框架的基本概念和原理,详细探讨 Arthas 的常用操作以及如何使用它进行监控和调试。我们还将给出一些实际应用场景的示例,让读者能够更好地理解和运用 Arthas 来提升自己的 Java 开发调试能力。

一、介绍

1.1 功能

  1. 监控(Observability):Arthas 提供了实时监控 Java 应用程序运行状态和性能的功能。通过监控,开发者能够获得关键的运行指标,如方法调用、线程状态、堆栈跟踪等,从而可以全面了解应用程序的运行情况。
  2. 诊断(Diagnosis):Arthas 支持深入调试和诊断Java应用程序,帮助开发者定位和解决问题。开发者可以通过 Arthas 提供的命令行界面,进行方法追踪、变量修改、热替换等操作,以便更好地理解代码执行过程和解决潜在的问题。
  3. 命令行界面(Command-line Interface):Arthas 使用简洁而强大的命令行界面来操作和控制监控和诊断功能。开发者可以通过在命令行中输入特定的命令,来获取所需的监控数据、执行诊断操作或配置监控规则等。这种命令行交互的方式使得 Arthas 对于开发者来说非常方便和灵活。

总而言之,Arthas框架基于监控和诊断的概念,通过命令行界面,提供了实时监控和深入调试 Java 应用程序的能力。

1.2 原理

  1. 基于Java的 Instrumentation 机制和字节码增强技术:

    • Instrumentation 是 Java SE 5 引入的一个功能强大的 API,它允许开发者在运行时修改、替换或者重新定义字节码,而不用修改源代码。

    • Arthas利用Java的Instrumentation API,在目标应用程序的启动过程中动态加载字节码增强器。

    • 字节码增强器负责对目标应用程序的类进行字节码修改和增强。

  2. 目标应用程序的运行时监控和诊断:

    • Arthas的字节码增强器根据监控规则和命令行输入的指令,在目标应用程序的方法中插入自定义的代码逻辑。
    • 插入的代码逻辑会在方法调用前后、异常抛出等关键点触发,实现对目标应用程序的监控和诊断。
  3. 动态代理技术:

    • Arthas利用 Java 的动态代理技术,对目标对象进行包装,以便在方法执行前后添加额外的逻辑。
    • 这样,Arthas 可以实现对目标对象的监控和诊断,无需修改目标对象的源代码。

Arthas的核心原理是利用Java的Instrumentation机制和字节码增强技术,在 目标应用程序运行时动态地修改和增强其字节码,从而实现对目标应用程序的监控和诊断功能。这种低侵入性的设计使得Arthas可以在不停止应用程序的情况下对其进行实时监控和调试,极大地提高了开发者的效率和调试能力。

二、安装使用

2.1 下载

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

上面jar包,第一次启动后会接着下载所需依赖包,如果不成功可直接在github上下载完整包

2.2 使用

使用和目标进程一致的用户启动,否则可能 attach 失败

java -jar arthas-boot.jar

进入命令行界面,需要选择想追踪的 java 进程

00

三、常用

3.1 实时查看

通过Arthas进行全局 JVM,线程,方法调用和堆栈跟踪分析

  • 使用dashboard 实时查看全局 JVM

    01

  • 获取实时线程的信息

    thread 1 #找到主线程
    
    thread -n 3 # 找到当前最忙的3个线程
    
    thread -b # 找出当前阻塞其他线程的线程,只支持找出 synchronized 关键字阻塞住的线程
    
    thread --state # 查看指定状态的线程
    

    02

  • 在所有匹配的方法调用处打印方法参数、返回值和执行时间等信息。

    trace demo.MathGame run
    trace com.example.MyClass *
    

    03_trace

  • watch

    对函数执行数据观测,让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值抛出异常入参,通过编写 OGNL 表达式进行对应变量的查看。

    4 个观察事件点,即 -b 函数调用前,-e 函数异常后,-s 函数返回后,-f 函数结束后(默认)

    # 查看运行方法超时的参数和返回结果
    watch demo.MathGame primeFactors '{params, returnObj}' '#cost>0.03' -n 1
    

    watch

3.2 追踪查看

  • watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测,这时tt 就可以发挥作用了,它能记录下当时方法调用的所有入参和返回值、抛出的异常

    可以通过tt -t 记录所有运行得方法,找到自己想要的,然后通过tt -i [index]查看具体参数,如果参数比较复杂,还可以通过-w 通过ognl表达式访问

    tt -t demo.MathGame primeFactors
    tt -i 1008
    tt -i 1008 -w 'params[0].obj'
    

    tt

    tt_01

    字段含义
    IS-RET方法是否以正常返回的形式结束
    IS-EXP方法是否以抛异常的形式结束

3.3 辅助命令

  • 强制GC

    vmtool --action forceGc
    
  • 重载方法

    有时匹配方法会碰到重载方法,可通过下面OGNL表达式挑选

    'params.length== 参数个数 && params[0] instanceof java.lang.String'
    

3.4 热更新

展示 Arthas 如何实现无需重启应用程序而进行热更新

retransform  /path/to/new/class/file
# 显示替换的类
retransform -l
# 根据id删除
retransform -d 1

注意:

  • 不允许新增加 field/method
  • 正在跑的函数,没有退出不能生效
  • 应该谨慎使用热更新,避免对系统稳定性和安全性产生负面影响

3.5 监控

使用monitor命令

# c	统计周期,默认值为 120 秒
monitor -c 5 demo.MathGame primeFactors "params[0] <= 2"

在这里插入图片描述

监控项说明
timestamp时间戳
classJava 类
method方法(构造方法、普通方法)
total调用次数
success成功次数
fail失败次数
rt平均 RT
fail-rate失败率

Arthas的监控功能灵活而强大,可以帮助开发人员及时发现和解决系统性能或行为问题。但需要注意的是,监控需要消耗一定的系统资源,因此应该合理设置监控规则,避免对系统产生额外的负担。

四、实战

4.1 CPU/内存占用过高

  • dashboard 查看占用CPU最高的线程名字,然后通过 thread ID 查看具体线程信息
  • 如果dashboard 面板的堆栈空间内存占用过多,可通过heapdump heapdump.hprof导出dump文件,用MAT 或 jvisualvm 查看

4.2 接口耗时高

  • 可通过trace demo.MathGame primeFactors 对应接口相关类和方法追踪
  • 还可以通过trace demo.MathGame primeFactors '#cost > 100' 将筛选耗时 >100ms 的方法

4.3 找到类所在jar

使用sc -d命令:使用以下命令进行类的查找:

  1. sc -d className
    

    其中,className为待查找的类的全限定名,例如demo.MathGame

  2. 查看结果:Arthas会输出类的相关信息,包括类所在的Jar包路径。在其中找到“code-source”一项,即可获得该类所在的Jar包路径。

    sc

注意事项:

  • 如果类尚未被加载,那么无法通过sc -d命令找到类所在的Jar包。
  • 如果类存在于多个Jar包中,Arthas 将只显示一个匹配。如果需要找到所有匹配的Jar包,可以使用sc -d className --deep命令进行深度查找。

4.4 查找类的实例

可以使用vmtool 获取实例

vmtool --action getInstances --className java.lang.String --limit 10

vm_tools

4.5 生成火焰图

开始采集:执行profiler start命令,开启性能分析。profiler 执行时间可以根据参数调整,如 --duration 10 --interval 500采样周期为500ms,持续10秒。
当命令执行完毕后,会在output目录下生成html文档,包含对应火焰图

此命令不支持windows

profiler start --duration 10 --interval 500

profiles

参考

  1. https://arthas.aliyun.com/doc/
  2. Arthas 看了官方文档还不会用?进来了解一哈~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1207404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用ChatGPT撰写学术论文?

在阅读全文前请注意&#xff0c;本文是利用ChatGPT“辅助完成”而不是“帮写”学术论文&#xff0c;请一定要注意学术规范&#xff01; 本文我将介绍如何使用清晰准确的“指令”让ChatGPT帮助我们在论文写作上提高效率&#xff0c;希望通过本文的指导&#xff0c;读者能够充分…

OpenCV入门——概述 || 环境搭建

文章目录 OpenCV与图形学的关系OpenCV与FFmpeg的关系博客内容概览计算机视觉的应用OpenCV简介环境搭建 OpenCV与图形学的关系 从图形中理解其内容&#xff0c;是计算机视觉的任务&#xff1b;通过模型渲染出图像&#xff0c;是图形学的任务。 OpenCV与FFmpeg的关系 博客内容概…

Android开发入门课

设备环境搭建 1. 安装模拟器 雷电模拟器官网 : https://www.ldmnq.com/?n=6000 注:选择一个喜欢的版本安装即可,建议安装3版本、自带系统为安卓7以下。 不过雷电没有mac版本,需要mac版本的模拟器,可以使用夜神模拟器: Mac版本更新信息 | 夜神模拟器帮助中心 2. 安装…

万万没想到,金融人都在考的CFA和CPA在中国人民大学与加拿大女王大学金融硕士的用途这么大?

CFA和CPA是金融行业中两个非常重要的专业认证。它们分别代表了不同的职业方向和技能要求&#xff0c;对于想要在金融行业发展的人来说&#xff0c;拥有这两个认证之一或者两者都具备是非常有帮助的。听说拥有CFA和CPA在中国人民大学与加拿大女王大学金融硕士的用途也很大&#…

基于SPI+DMA方式的ws2812b氛围灯控制

好处&#xff1a;相比于gpio控制&#xff0c;可以大大节省CPU的时间&#xff0c;CPU只要将要传输的数据计算好放入内存中&#xff0c;然后发动DMA传输即可&#xff0c;后续整个过程并不需要CPU干预&#xff0c;CPU可以用于做其他的事情。特别是某些带蓝牙的芯片&#xff0c;需要…

【移远QuecPython】EC800M物联网开发板的MQTT协议腾讯云数据上报

【移远QuecPython】EC800M物联网开发板的MQTT协议腾讯云数据上报 文章目录 导入库初始化设置MQTT注册回调订阅发布功能开启服务发送消息函数打包调用测试效果附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 导入库 from TenCentYun import TX…

MongoDB的简单使用

Linux安装MongoDB-CSDN博客 简单使用 /usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf 启动 新建数据库 test MongoDB里 db.createCollection("books") 创建名为books的集合 好比表 db.getCollection(books).find({}) 查询所有 db.books.sa…

【go】报错整理与解决

文章目录 依赖下载失败checksum mismatch启动报错missing go.sum 依赖下载失败checksum mismatch > go get github.com/hibiken/asynqmon go: downloading github.com/hibiken/asynqmon v0.7.2 go: github.com/hibiken/asynqmonv0.7.2: verifying module: checksum mismatc…

QGIS之十六过滤器选择要素导出

效果 步骤 1、准备数据 下面这份数据是中国范围内的市级行政区划范围 2、打开表格 3、选择要素 方法1 从图上能看到选中的图形 方法2 4、导出

批量重命名软件推荐 A Better Finder Rename 12最新 for mac

A Better Finder Rename的大量重命名选项被组织成15个直观的类别&#xff0c;涵盖了一个伟大的文件重命名器所期望的所有文本&#xff0c;字符&#xff0c;位置&#xff0c;转换和截断功能。 除此之外&#xff0c;A Better Finder Rename提供了更多高级功能&#xff0c;可以满…

VMware 虚拟机开启后黑屏问题的解决方式

很好&#xff0c;现在是vm 虚拟机节目的连续剧了 首先&#xff0c;我们安装好了&#xff0c;vm软件。 其次&#xff0c;我们在vm中创建了虚拟机。 再其次&#xff0c;我们解决了&#xff0c;开启虚拟机计算机自动重启的问题。 最后我们遇到了这个问题&#xff1a;虚拟机开启后整…

独立站邮件营销大佬,手把手教你如何做好!

做独立站邮件营销的方式&#xff1f;独立站怎么做邮件营销&#xff1f; 邮件营销&#xff0c;作为独立站营销的重要手段之一&#xff0c;越来越受到卖家的重视。如何才能做好邮件营销呢&#xff1f;蜂邮EDM将手把手教你如何做好独立站邮件营销&#xff0c;让你在电商领域中更上…

RocketMQ(4.9.4)学习笔记 - 安装部署

单机部署&#xff1a; 官网文档地址&#xff1a; https://rocketmq.apache.org/zh/docs/4.x 参考文档&#xff1a; windows安装RocketMQ_rocketmq windows_book多得的博客-CSDN博客 下载地址&#xff1a; https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.…

kafka单节点创建 topic 超时

1.根据之前的知道&#xff0c;安装kafka的时候改了config的server.properies文件中的listeners配置 之前这一行是没有注释掉的&#xff0c;结果创建topic的时候时钟报错连接超时 结果资料&#xff0c;发现就是因为listeners的问题 https://blog.csdn.net/weixin_42133361/art…

批量整理相同名称文件,高效归类至指定文件夹!

你是否曾经遇到过成百上千的文件名重复&#xff0c;让人无从下手的情况&#xff1f;现在&#xff0c;我们为你带来了一款全新的文件管理工具&#xff0c;它可以让你轻松地将相同名称的文件批量整理归类到指定文件夹中&#xff0c;让你的文件管理更加高效、有序&#xff01; 第…

Java系列之 IDEA 为类 和 方法设置注解模板

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 1、类方法注解模板 1、File–>settings–…

污水处理系统有哪些设备

污水处理系统通常包括以下几种主要设备&#xff1a; 格栅&#xff1a;用于拦截大颗粒悬浮物&#xff0c;以保护后续处理设备。泵&#xff1a;用于提升污水&#xff0c;使其能够被输送到处理设备的上游。曝气池&#xff1a;通过向污水中注入空气&#xff0c;使污水中的有机物质…

【23真题】坑挖的不错,题目也有质量!

今天分享的是23年西安石油大学810的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年西安石油810考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取!本套试题内容难度中等偏下&#xff0c;题量较少&#xff0c;没有考察选填题&#xff0c;通…

Ubuntu 24.04发布日期以定

导读Ubuntu 的下一个长期支持 (LTS) 版本 Ubuntu 24.04 的最终发布日期已确定&#xff0c;计划于 2024 年 4 月 25 日发布。 Ubuntu 的下一个长期支持 (LTS) 版本 Ubuntu 24.04 的最终发布日期已确定&#xff0c;计划于 2024 年 4 月 25 日发布。 除此之外&#xff0c;Ubuntu…

漏洞扫描事项CNNVD

随着安全事项的进行&#xff0c;全民安全&#xff0c;我们如何获取漏洞补丁信息&#xff0c; 国家信息安全漏洞库” https://www.cnnvd.org.cn/ CNNVD&#xff08;“国家信息安全漏洞库”&#xff09;&#xff0c;企业或者个人可以提供漏洞&#xff0c;安全扫面厂家给出的修复…