Arthas,应用诊断利器!【送源码】

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

Arthas是一款由阿里巴巴开源的Java应用诊断利器,它可以帮助开发人员在运行时对Java应用进行调试和诊断,解决线上问题。具体详细使用请参考官方文档,本文将简单的描述一下该工具的用法和常用命令,以勾起大家对此工具应用的兴趣。

官方文档:https://arthas.aliyun.com/

一、Arthas的介绍

Arthas是一款基于Java的命令行工具,可以在运行时对Java应用进行调试和诊断,其主要功能包括:实时查看JVM状态、方法调用链路追踪、监控系统资源消耗、动态修改代码等。

同时Arthas也是阿里巴巴开源的Java诊断工具,集成了较多的功能,包括进程状态查看、Java类、方法的查找和监控、异常信息分析、线程状态监控、JVM统计信息查看等。相比其他Java诊断工具,Arthas有以下几个优点:

  1. 操作简单:只需要在目标机上执行一个脚本即可。

  2. 功能强大:支持从线上诊断到本地诊断场景,并且能够解决大部分日常开发遇到的问题。

  3. 方便快捷:可以动态修改代码,方便调试。

  4. 支持多种使用方式:命令行使用方式、WebUI使用方式、telnet响应式命令行交互使用方式。

  5. 针对Java应用的特征进行优化,包括注重性能、稳定性、安全性。

  6. 多年在线大规模使用证明了Arthas的高性能、低影响性和实用性。

Arthas的安装非常简单,只需要通过Maven将其依赖添加到项目中即可:

 
<dependency>    <groupId>com.alibaba</groupId>    <artifactId>arthas-client</artifactId>    <version>3.5.4</version></dependency
 

二、Arthas的使用

1. 进入Arthas Shell

在使用Arthas之前,我们需要先进入Arthas Shell。可以通过以下命令进入

./as.sh

出现如下界面即表示成功进入Arthas Shell:

$ as.sh  / \  _   _ _ __ (_) ___| |__   ___ _ __ ___ / _ \| | | | '_ \| |/ __| '_ \ / _ \ '__/ __|/ ___ \ |_| | | | | | (__| | | |  __/ |  \__ \\/   \/\__,_|_| |_|_|\___|_| |_|\___|_|  |___/Welcome to Arthas, enjoy it. More info please visit: https://alibaba.github.io/arthas$ _

2. 查看JVM状态

在Arthas Shell中,我们可以通过以下命令查看当前JVM的状态:

$ jvm

执行以上命令后,会输出类似于以下的信息:

[INFO] [arthas-jvm] [0.140s] [pid:5102] [user:binjie] [hostname:localhost.localdomain] [cwd:/home/binjie] [command:/usr/lib/jvm/java-8-oracle/bin/java -jar /home/binjie/demo/target/demo-1.0-SNAPSHOT.jar] [args:] [state:RUNNING] [os:Linux 4.18.0-147.5.1.el8_1.x86_64 amd64] [Java home:/usr/lib/jvm/java-8-oracle]

其中,我们可以看到当前JVM的进程ID、用户、主机等信息。

3. 方法调用链路追踪

有时我们需要查看某个方法被调用了多少次、被哪些方法调用了,甚至是每一次调用的参数和返回值。这时可以使用Arthas的trace命令。以下是一些常用的示例:

(1)追踪某个方法的所有调用

$ trace com.example.demo.service.UserService getUserById

这条命令将会追踪com.example.demo.service.UserService类中的getUserById方法的所有调用。

(2)追踪某个类中所有方法的调用

$ trace com.example.demo.service.UserService

这条命令将会追踪com.example.demo.service.UserService类中的所有方法调用。

(3)追踪某个方法的详细信息

 
$ trace com.example.demo.service.UserService getUserById -n 5

这条命令将会追踪com.example.demo.service.UserService类中的getUserById方法的前5次调用,并打印出每次调用的参数和返回值。

4. 监控系统资源消耗

在Arthas Shell中,我们可以通过以下命令监控系统资源的消耗情况:

(1)监控CPU占用率

$ dashboard

执行以上命令后,会输出一个监控面板,其中包含了CPU占用率、Java线程数、内存使用情况等信息。

(2)监控线程

$ thread

执行以上命令后,会输出当前JVM中所有线程的信息。

(3)监控GC

$ gc

执行以上命令后,会输出GC的相关信息。

5. 动态修改代码

Arthas还支持在运行时动态修改代码,以下是一些常用的示例:

(1)修改某个类的某个方法的返回值shell

$ redefine com.example.demo.service.UserService getUserById "return \"Hello Arthas!\";"

这条命令将会修改com.example.demo.service.UserService类中的getUserById方法的返回值为"Hello Arthas!"。

(2)添加某个类的某个方法

$ redefine -c com.example.demo.service.UserService -m addUser --params-string "java.lang.String name, java.lang.Integer age" "logger.info(\"addUser invoked! name:{} age:{}\", name, age); return true;"

这条命令将会在com.example.demo.service.UserService类中添加一个名为addUser的方法,并且该方法的参数为String name和Integer age,最后将会输出日志并返回true。

6. 其他常用命令

除了以上的命令之外,Arthas还有许多其他的实用命令,以下列举一些常用的:

(1)查看方法调用次数

$ sc -d 3 com.example.demo.service.UserService getUserById

这条命令将会查看com.example.demo.service.UserService类中的getUserById方法在最近的3秒钟内被调用的次数。

(2)查看线程堆栈

$ thread -i [线程ID]

这条命令将会输出指定ID的线程的堆栈信息。

(3)查看类的加载情况

$ classloader -c com.example.demo.service.UserService

这条命令将会查看com.example.demo.service.UserService类的加载情况。

三、 连接应用

使用 Arthas 前需要先连接到相应的 Java 应用程序,Arthas 支持两种连接方式:默认连接和 Telnet 连接。

3.1 默认连接

默认连接是指 Arthas 自动连接当前机器上正在运行的 Java 应用程序。可以通过以下命令启动默认连接:

$ java -jar arthas-boot.jar

启动后会自动连接当前机器上正在运行的 Java 应用程序。

$ java -jar arthas-boot.jar --target-ip 127.0.0.1 --telnet-port 3658

启动后会尝试连接指定的 IP 地址和端口号上的 Java 应用程序。

3.2 Telnet 连接

Telnet 连接是指通过 Telnet 协议连接到 Java 应用程序。可以通过以下命令启动 Telnet 连接:

$ telnet 127.0.0.1 3658

连接成功后可以输入 help 命令查看 Arthas 的帮助信息。

四、小结一下

Arthas就像是Java应用程序的救世主,它会让你在调试过程中不再感到“纠结”和“郁闷”,而是变成“顺风顺水”和“乐在其中”。使用Arthas,你可以轻松地查看JVM信息、调用链追踪、方法监控等等,就像使用神奇的魔棒一样。

使得你在调试过程中可以开开心心地喝着茶、说着笑话,并且在芝士多多的群里大显身手,展现你的技术实力和幽默感。Arthas就是你成功找到Bug的必备良药,让我们一起来拥抱这个优秀的工具吧!

福利:

扫码回复【图书】可免费领取图书管理系统源码

图片

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

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

相关文章

Model-Based Pose Estimation for Rigid Objects(基于SIFT)

6D目标检测工程落地需求的小算力算法&#xff0c;本文具有借鉴意义&#xff0c;但对于特征点少的目标不太好用。 摘要 在多个实际应用中&#xff0c;经常会遇到确定图像中出现的物体姿态的问题。处理这一挑战的最有效策略是按照基于模型的范式进行&#xff0c;这涉及构建物体…

Qt快速入门到熟练(电子相册项目(一))

经过一段时间的学习&#xff0c;相信大家对QT的基本用法都有所了解&#xff0c;从这篇文章开始&#xff0c;我准备记录一下电子相册的项目的一个学习过程。 实现项目创建功能 对于这个电子相册的项目&#xff0c;我并没有在一开始就把所有可能用到的功能模块去事无巨细的考虑周…

通过域名接口申请免费的ssl多域名证书

来此加密已顺利接入阿里云的域名接口&#xff0c;用户只需一键调用&#xff0c;便可轻松完成域名验证&#xff0c;从而更高效地申请证书。接下来&#xff0c;让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书&#xff0c;泛域名证书。 首先&a…

Intellij IDEA创建springboot项目

1、点击 Create New Project 2、选择 Spring Initializr —> 点击下一步 3、备注&#xff1a; Artifact为项目名称 group为项目组名 language设置为java packaging为打包方式 3、选择相应的依赖&#xff0c;也可以自己导入&#xff0c;在Developer Tools 、Web 、SQL 中选…

开箱即用,简单上手体验LobeChat搭建私人ChatGPT

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【LeetCode算法】第69题:x的平方根

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;第一次想到的是让i从1开始遍历&#xff0c;看i*ix是否成立&#xff0c;但是这样就会导致i*i超出了int的范围&#xff0c;无法正常求解。第二次&#xff0c;想着比较x/…

H800基础能力测试

H800基础能力测试 参考链接A100、A800、H100、H800差异H100详细规格H100 TensorCore FP16 理论算力计算公式锁频安装依赖pytorch FP16算力测试cublas FP16算力测试运行cuda-samples 本文记录了H800基础测试步骤及测试结果 参考链接 NVIDIA H100 Tensor Core GPU Architecture…

2024.5.23 作业 xyt

今日课堂内容&#xff1a;超时检测 数据库 select函数 #include <myhead.h> int main(int argc, const char *argv[]) {//1、定义检测容器fd_set readfds;//2、清空内容FD_ZERO(&readfds);//3、将文件描述符放入集合中FD_SET(0, &readfds);//4、定义超时时间变…

【传知代码】从零开始搭建图像去雾神经网络-论文复现

文章目录 概述原理介绍网络结构 核心逻辑迁移学习子网数据拟合子网 环境配置训练本次复现代码所用数据集测试本次复现代码所用的评价指标 结果展示在O-Haze数据集上的结果在I-Haze数据集上的结果 小结 本文涉及的源码可从从零开始搭建图像去雾神经网络该文章下方附件获取 本文复…

【Java】时间工具类 —— 格式化,个性化,时间操作

在平常的编程中&#xff0c;经常会遇到时间的各种类型转化&#xff0c;避免每次都使用第三方库或者上网搜索&#xff0c;决定整理一下写篇博客&#xff0c;也是从各处收集或者让AI写的方法&#xff0c;应该可以涵盖平时所有的场景了。 格式化方法 String format(Object time)&…

TimeHelper——一个简单快捷的PHP日期时间助手类库

⏱️TimeHelper——一个简单快捷的PHP日期时间助手类库 TimeHelper 是一个简单易用的PHP时间日期助手类库,可以快速实现常用的时间日期操作,比如获取指定时间的秒数,获取友好的时间格式,判断时间范围,计算两个时间相差值,返回N小时/天/星期/月/年前或者后的时间戳等等 特性 …

tomcat--应用部署

tomcat根目录结构 Tomcat中默认网站根目录是/usr/local/apache-tomcat-8.5.100/webapps/在Tomcat的webapps目录中&#xff0c;有个非常特殊的目录ROOT&#xff0c;它就是网站默认根目录。将eshop解压后的文件放到这个/usr/local/apache-tomcat-8.5.100/webapps/ROOT中。bbs解压…

为什么要使用 eval

调用 eval 方法的原因是为了确保模型在进行预测时使用正确的配置。在训练过程中&#xff0c;某些层&#xff08;如 Dropout 层&#xff09;的行为是为了正则化而设计的&#xff0c;它们会在每次迭代中随机丢弃一些神经元的输出。而在评估模式下&#xff0c;这些层将不再随机丢弃…

Git简单理解

Git 概述 Git 是一个免费的开源的&#xff0c;分布式版本控制系统&#xff0c;可以快速高效的处理从小型到大型的各种项目 Git占地面积小&#xff0c;性能极快&#xff0c;具有廉价的本地库&#xff0c;方便的暂存区和多个工作流分支等特性 版本控制 版本控制是一种记录文件…

低耦合双写一致性方案-使用canal+MQ

需求&#xff1a;继上一篇使用xxljob实现数据的全量同步到es后&#xff0c;当数据库中新增、删除、修改数据时&#xff0c;应该对es中的对应索引库实现增量同步。 本文介绍了2种双写一致性方案&#xff0c;对其中使用MQ的方案进行了实现。 1. 方案设计 1.1 数据一致性问题分析…

2024.5.21欧洲商会网络安全大会(上海)

本次安策将将参加超越 2024 年网络安全大会&#xff1a;驾驭数字前沿大会(上海)&#xff0c;2024年5月21日&#xff0c;期待和欢迎新老朋友在大会上会面和交流。 时间 2024-05-21 |14:00 - 16:30 场地&#xff1a; 上海瑞士大酒店 地址&#xff1a; 3rd Floor&#xff0c; Davo…

iOS 17.5 release notes

文章目录 iOS 17.5 更新恢复了多年前删除的一些图片新增彩虹壁纸欧盟用户可直接从网站下载应用新增了追踪通知改进 Apple News图书应用"阅读目标"设计更新颜色匹配的播客小部件Web浏览器安全权限的访问下一代“Beats Pill”扬声器在iOS 17.5代码中得到确认店内Vision…

【C++】 单例设计模式的讲解

前言 在我们的学习中不免会遇到一些要设计一些特殊的类&#xff0c;要求这些类只能在内存中特定的位置创建对象&#xff0c;这就需要我们对类进行一些特殊的处理&#xff0c;那我们该如何解决呢&#xff1f; 目录 1. 特殊类的设计1.1 设计一个类&#xff0c;不能被拷贝&#xf…

人际关系与情景模拟

面试中的同事 1、着眼合作多理解 2、立足长远多承担 3、分工协作多沟通 4、相互学历促成长 面试中的领导 1、尊重领导权威 2、适应领导风格 3、服从领导安排 4、请示领导意见 5、完成领导任务 6、汇报工作结果 面试中的下属&#xff08;面试考的很少&#xff0c;毕…

@Configuration注解使用详解【记录】

Configuration注解 1、主要作用&#xff1a; 标识配置类&#xff1a;Configuration用于标识一个类是配置类&#xff0c;这是Spring Boot应用程序中的关键组件之一&#xff0c;用于定义和管理Bean的创建和配置&#xff08;用于取代bean.xml配置文件注册bean对象&#xff09;。通…