Arthas-Java应用生产可用诊断神器

一、背景与简介

1、介绍

        如果你的程序是Java开发,有时候生产环境出现性能瓶颈或者接口访问缓慢、又或者本地环境无法进行复现,只会在线上产生bug或者问题,这时候我们需要进行在线debug排查问题。但是生产环境又不能轻易重启、或者使用传统方式轻易的debug、jmap、jstack等等进行排查,因为这些传统工具可能会导致程序业务线程暂停,产生线上事故。 那么我们有什么工具能方便我们针对线上程序做调试或者定位问题吗? 这个神器就是Alibaba开源的Arthas.

        Arthas 是一款线上Java应用监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

        官方站点: https://arthas.gitee.io/doc/

        详情可以查看官方网站, 官网有相关DOC文档、教程、指令等相关使用参考

2、Arthas(阿尔萨斯)能为你做什么?

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

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

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

二、基本安装和初体验

1、基本安装

1、下载Arthas包

https://arthas.aliyun.com/download/latest_version?mirror=aliyun

2、保证当前服务器存在至少1个JAVA进程, 使用命令运行 java -jar arthas-boot.jar,此时会在线下载依赖的JAR包到本地,最后执行.

3、选择至少1个需要监控或者观察的进程ID, 回车,进入Arthas控制台。否则Arthas探测不到任何进程,则Arthas直接退出

4、进入Arthas控制台

2、与Linux相比,功能类似的基本指令

1、version、help、cls、history、grep、pwd、echo、tee

version:   显示当前Arthas的版本号

help:  查看有哪些命令、各个命令的功能、参数是什么

cls:  清屏

history:  查看历史命令

grep: 管道关键词过滤

pwd:   查看当前attach进程所在的工作目录

echo:  和Linux一致

tee: 和Linx一致

3、常用的基本命令

1、dashbord

        可以查看当前JVM虚拟机的Thread线程运行情况、Memory内存情况、操作系统信息,实时更新,类似Linux的Top命令:

2、thread

        查看JVM线程运行情况:

3、memory

        查看JVM堆内存情况:

4、jad

        jad可以针对某个具体类做反编译出Java源代码,在排查时可以做一些逻辑实现的参考:

5、jvm

        查看JVM相关信息,可以查看GC信息、内存信息等: 

三、高级排查指令

1、monitor[监控类的方法执行情况]

1、-c参数,运行次数
monitor -c 5 demo.MathGame

时间戳、类名称、方法、调用次数、成功次数、失败[抛出异常]次数、平均耗时、失败率.

2、params条件表达式

2、trace[方法调用耗时跟踪]

1、简单使用
trace demo.MathGame run

trace追踪demo.MathGame这个类的  run  方法, 看下run方法的里面各个方法的执行耗时时长.

源码:

2、trace #cost耗时条件
trace demo.MathGame run '#cost > 0.1'

trace追踪demo.MathGame run方法, 并且只有耗时大于0.1ms的才打印出来

3、通过listenerId,深入显示调用层级

1、首先第一版执行一次trace, 得到一个listenerId, 此时只展示第一层调用关系

此时,拿到listenerID: 5

2、如果我还想继续看primeFactors()函数的调用追踪,我新开启一个Arthas终端,然后继续使用这个命令追踪目标函数primeFactors, 但是后面需要添加参数 --listenerId 5

执行命令:
 

trace demo.MathGame primeFactors --listenerId 7

原窗口显示的层级变多了:

3、watch[函数执行数据观测]

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

watch demo.MathGame primeFactors -x 2

        观察表达式,默认值是{params, target, returnObj}

        watch观察 demo.MathGame这个类的 primeFactors 方法执行情况[默认时机: 函数正常结束]的返回值内容,  -x 2  -x是显示Java对象信息的深度,默认是1, 最大是4.
        显示对象深度越大,对象的整体数据结构和信息越详细

4、stack[输出当前方法被调用的调用路径]

        很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。

        监控某个类的某个方法,都被那些类的方法调用了,因为调用入口可能很多

       

四、总结

        上述知识一些常用高频命令的简介和简单使用,更加详细的深入需要我们针对Arthas进行实操,使用过程中我们才能将这些命令融会贯通,发挥价值。 因为单纯只是从单个指令而言,好像简单,但是现实的实际情况远比我们想象的复杂,所以如何运用这些命令才是关键。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

django区县网络安全执法模式研究flask python

作为一款区县网络安全执法模式研究,面向的是大多数学者,软件的界面设计简洁清晰,用户可轻松掌握使用技巧。在调查之后,获得用户以下需求: (1)用户注册登录后,可进入系统解锁更多功能…

软件成本度量

1. 软件成本度量的意义 软评的意义主要在于其在软件项目的预算、招投标、实施及决算后评估阶段的重要作用。 在预算及招投标阶段,软评通过软件成本度量有助于制定合理的项目预算,规范招投标行为。这一阶段,甲方需要准确估算项目成本和合理的投…

加速数字化之旅:MessageBox赋能HubSpot与微信公众号的无缝整合

在数字化时代,企业需要整合关键平台以适应快速变化的市场。HubSpot和微信公众号的整合成为数字化营销的核心策略之一。MessageBox作为整合的关键力量,通过其卓越的能力,极大地加速了HubSpot与微信公众号的融合过程。今天运营坛将深入探讨Mess…

【OpenCV人脸检测】写了个智能锁屏小工具!人离开电脑自动锁屏

文章目录 1. 写在前面2. 设计思路3. 人脸检测4. 程序实现 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋…

React Hooks 学习笔记

1.useState() 实现对页面数据的存储,当数据改变时候,自动触发render函数 2.useRef 用来解决两个问题: 1).是获取DOM元素或子组件的实例对象 2).存储渲染周期之间共享的数据 3.useEffect 4.useLayoutEffect 5…

数据结构(C语言)代码实现(六)——单链表的实现

目录 参考、格式 头文件LinkList.h 一、将函数的小括号写成中括号 二、读取权限冲突 三、L->Last指针没有移动 四、函数指针的使用 头文件完整代码 测试函数(主函数)test.cpp 测试结果 参考、格式 数据结构课本2.3节(严蔚敏版&a…

【PLC一体机】PLC一体机中如何实现触摸屏和PC电脑的通讯

博主今天准备把之前买的PLC一体机拿出来玩一下,翻看以前的博文,发现没有记录分享PLC一体机中如何实现触摸屏程序下载的内容。 如之前博文介绍的那样,PLC一体机由PLC和触摸屏两部分集成的设备,因此设备内部已经做好了PLC和触摸屏之…

树莓派5一键安装C++版本OpenCV

安装环境 本人当前的安装环境: 树莓派5Raspberry Pi os (64-bit) Debian12 Bookworm 镜像下载地址 我这里是将镜像安装好后直接安装opencv,如果不是刚安装好的镜像需要注意是否有openCV的python之类的安装过,不然可能出现编译错误 一、扩展内…

HubSpot营销自动化如何优化营销流程?

HubSpot营销自动化在优化营销流程、减少手动工作以及提高效率方面发挥着关键作用。以下是一些具体的方法和策略: 1. 自动化电子邮件营销: 利用HubSpot的电子邮件自动化功能,设置触发条件,使邮件发送根据用户行为或阶段自动进行。…

Java 数据结构 二叉树(一)二叉查询树

目录 树的种类 二叉树 二叉查找树 满二叉树 ​编辑 完全二叉树 二叉树的数据存储 链式存储 数组存储 寻址方式: 二叉树的遍历(了解即可) ​编辑 二叉查询树缺点 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满…

Web项目利用OSS进行图像存储服务

一、OSS介绍 在Web项目中,一些常见的功能,比如展示图片,修改头像等,都需要进行图片的上传操作,但是如果是存储在Web服务器中,在读取图片的时候会占用比较多的资源,影响服务器的性能。 常…

EasyCVR智能视频监控平台云台降低延迟小tips

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

零基础爬什么值得买的榜单——爬虫练习题目一(答三)

一步一步似爪牙,先给爷爬一个! 引言分析数据上一节代码运行 工具:JSON 在线解析使用实操 获取其中一个数据添加代码知识点 结尾 引言 我也太能拖了 这个假期前确实有点懒惰 加上这个周末连班 不能去打篮球 腿没有得到充分的运动 像是千万只蚂蚁在爬一样…

AI Infra论文阅读之将流水线并行气泡几乎降到零(附基于Meagtron-LM的ZB-H1开源代码实现解读)

0x0. 前言 这篇论文对应的链接为:https://openreview.net/pdf?idtuzTN0eIO5 ,最近被ICLR 2024接收,但不少AI Infra的同行已经发现了这个工作的价值,并且已经开源在 https://github.com/sail-sg/zero-bubble-pipeline-parallelis…

编写程序实现二叉树的创建,三种遍历自己销毁

#include <myhead.h>// 定义二叉树节点结构体 struct tree {char value; //二叉树的值struct tree* left; //左子树struct tree* right; //右子树 };// 创建节点 struct tree* create_node(int value) {//申请空间struct tree* new (struct tree*)malloc(sizeof(st…

[Python] opencv - 什么是直方图?如何绘制图像的直方图?

什么是直方图&#xff1f; 直方图是一种统计图&#xff0c;用于展示数据的分布情况。它将数据按照一定的区间或者组进行划分&#xff0c;然后计算在每个区间或组内的数据频数或频率&#xff08;即数据出现的次数或占比&#xff09;&#xff0c;然后用矩形或者柱形图的形式将这…

学成在线:媒体资源管理系统(MAM)

媒体资源管理系统(MAM) 媒体资源管理系统(Media Asset Management)是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容进行数字化存储、管理以及应用的总体解决方案,可以满足媒体资源拥有者收集、保存、查找、编辑、发布各种信息的要求,为媒体资源…

Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1

目录 【问题描述】maven环境报错 Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1 【解决办法】 检查maven路径是否一致 路径一致的话&#xff0c;更改配置文件settings.xml的镜像源。 添加代码到 <mirrors> <!-- 阿里镜像 --> &l…

Security ❀ TCP异常报文详解

文章目录 1. TCP Out-Of-Order2. TCP Previous Segment Lost3. TCP Retransmission4. TCP Dup Ack XXX#X5. TCP Windows Update6. TCP Previous segment not captured7. 异常案例分析 TCP协议中seq和ack seq的联系&#xff1a; id4的http请求报文由客户端发向服务器&#xff0…

Transformer实战-系列教程1:Transformer算法解读1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 Transformer实战-系列教程1&#xff1a;Transformer算法解读1 Transformer实战-系列教程2&#xff1a;Transformer算法解读2 现在最火的AI内容&#xff0c;chatGPT、视觉大模…