【Arthas】阿里的线上jvm监控诊断工具的基本使用

news2024/11/19 1:23:47

关于对运行中的项目做java监测的需求下,Arthas则是一个很好的解决方案。
我们可以用来
1.监控cpu 现成、内存、堆栈
2.排查cpu飚高 造成原因
3.接口没反应 是否死锁
4.接口慢优化
5.代码未按预期执行 是分支不对 还是没提交?
6.线上低级错误 能不能不重启下 热部署 、类替换

一、简介

Arthas 是阿里开源的 Java 诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

二、安装

要安装 Arthas 工具,可以按照以下步骤进行:

  1. 访问 Arthas 的 GitHub 仓库:Arthas GitHub。

  2. 根据操作系统,选择下载最新版本的 Arthas 工具,这是中文官网https://arthas.aliyun.com。
    在这里插入图片描述

  3. 解压下载的文件到希望存放 Arthas 的目录。

  4. 打开命令行窗口,并进入到解压后的 Arthas 目录。

  5. 执行 ./as.sh(Linux/Mac)或 as.bat(Windows)启动 Arthas 工具。

现在,成功安装了 Arthas 工具,可以开始使用它来进行 Java 诊断了。
Windows为例 找到对应的下载解压后的目录,执行cmd,java -jar arthas-boot.jar
在这里插入图片描述
这里会展示启动arthas之前的正在运行的项目,想要查看哪个项目就可以直接输入序号 例:3
在这里插入图片描述
看到logo后则表示已经Attach成功,就可以接着执行对应命令来进行检测等操作。

三、命令

1. help: 查看帮助文档,列出所有可用命令。可以使用 help <command> 获取特定命令的详细说明。

2. dashboard: 显示实时的 JVM 仪表盘,提供内存、线程、GC 等关键信息的概览。这有助于快速了解应用程序的运行状况。

3. thread: 查看线程信息和线程堆栈。可以使用此命令来分析线程的运行状态,识别死锁或性能瓶颈。

  • 示例: thread 命令可以列出所有线程,并显示每个线程的 ID、状态、名称和堆栈信息。

  • 用法:

    • thread: 列出所有线程。
    • thread -n 10: 列出前 10 个线程。
    • thread -b: 列出所有阻塞的线程。
    • thread <threadId>: 查看指定线程的详细信息。

4. heapdump: 生成 Java 堆转储文件,用于分析内存使用情况。这对于排查内存泄漏或内存溢出问题非常有用。

  • 示例: heapdump 命令可以生成一个堆转储文件,包含了应用程序在当前时刻的内存快照。

  • 用法:

    • heapdump: 生成一个堆转储文件,默认保存到当前目录。
    • heapdump -f /tmp/heapdump.hprof: 指定堆转储文件的保存路径和文件名。

5. watch: 实时监控方法的调用次数、耗时等。可以使用此命令来观察方法的执行效率,识别性能瓶颈。

  • 示例: watch 命令可以监控指定方法的调用次数、耗时、参数和返回值等信息。

  • 用法:

    • watch -E 'executionTime' -n 10 'com.example.MyService.processOrder(*)': 监控 com.example.MyService.processOrder() 方法的执行时间,每 10 次调用输出一次统计结果。
    • watch -E 'returnValue' -n 5 'com.example.MyService.processOrder(String, int)': 监控 com.example.MyService.processOrder(String, int) 方法的返回值,每 5 次调用输出一次结果。

6. trace: 跟踪方法的调用,包括参数和返回值。这有助于理解方法的执行流程,定位问题根源。

  • 示例: trace 命令可以跟踪指定方法的调用流程,包括参数、返回值、调用栈信息等。

  • 用法:

    • trace com.example.MyService.processOrder(*): 跟踪 com.example.MyService.processOrder() 方法的调用流程。

7. sc <class>: 查看指定类的代码。

  • 示例: sc 命令可以查看指定类的源代码,方便理解代码逻辑。

  • 用法:

    • sc com.example.MyService: 查看 com.example.MyService 类的源代码。

8. redefine <class>: 动态修改指定类的代码,无需重启应用程序。

  • 示例: redefine 命令可以动态修改指定类的代码,方便快速验证代码修改效果。

  • 用法:

    • redefine com.example.MyService: 动态修改 com.example.MyService 类的代码。

9. jvm: 查看 JVM 的运行参数和状态。

  • 示例: jvm 命令可以查看 JVM 的运行参数和状态,可以了解 JVM 的运行情况。

  • 用法:

    • jvm: 查看 JVM 的基本信息。
    • jvm -D: 查看 JVM 的系统属性。
    • jvm -X: 查看 JVM 的运行参数。

10. ognl <expression>: 使用 OGNL 表达式访问对象属性。

11. jad <class>: 反编译指定类的 Java 字节码。

  • 示例: jad 命令可以反编译指定类的 Java 字节码,方便查看类的代码结构。

  • 用法:

    • jad com.example.MyService: 反编译 com.example.MyService 类的字节码。

四、总结

1. 线上问题排查利器: Arthas 的强大功能可以帮助您快速定位和解决线上问题,例如:

  • 性能问题: 使用 watchtrace 命令分析方法的执行时间和调用次数,识别性能瓶颈。
  • 内存问题: 使用 heapdump 命令生成堆转储文件,分析内存泄漏或内存溢出问题。
  • 线程问题: 使用 thread 命令查看线程状态和堆栈,识别死锁或线程阻塞问题。
  • 代码问题: 使用 sc 命令查看类和方法的代码,帮助您理解代码逻辑并定位问题。

2. 提高开发效率: Arthas 不仅是排查问题的工具,还可以提高开发效率,例如:

  • 快速定位问题: 使用 tracewatch 命令快速定位问题代码,减少调试时间。
  • 动态修改代码: 使用 redefine 命令动态修改代码,无需重启应用程序,方便快速验证代码修改效果。
  • 查看运行时数据: 使用 dashboardjvm 命令查看运行时数据,帮助您了解应用程序的运行状态。

3. 学习和探索: Arthas 是学习和探索 Java 运行时的绝佳工具,例如:

  • 深入了解 JVM: 使用 jvm 命令查看 JVM 的运行参数和状态,加深对 JVM 的理解。
  • 学习 Java 代码: 使用 sc 命令查看类和方法的代码,学习 Java 代码的实现细节。
  • 探索 Java 运行时: 使用 ognljad 命令探索 Java 运行时环境,了解 Java 运行时的内部机制。

总而言之,Arthas 是一款功能强大的工具,可以帮助有效地诊断和监控 Java 应用程序,提高开发效率。

四、Idea插件

idea也有现成的Arthas插件,可以有效的帮我们生成命令。
在这里插入图片描述
可以右键方法,生成命令到剪贴板里面。
在这里插入图片描述

五、引申推荐

1.通过 Arthas Trace 命令将接口性能优化十倍

2.Java 诊断神器Arthas真有那么香?它到底能解决什么问题 | Arthas 教程实操 | 线上问题排查思路和手段

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

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

相关文章

Go语言的构建标签(build tag)有何用途?

文章目录 原因解决方案示例代码总结 Go语言的构建标签&#xff08;Build Tags&#xff09;有何用途&#xff1f; 在Go语言中&#xff0c;构建标签&#xff08;Build Tags&#xff09;是一种特殊的注释&#xff0c;它用于控制Go编译器在构建代码时是否包含某些文件。这些标签可…

网页上的超链接复制到Excel中+提取出网址+如何保存

定义 超链接网页标题地址栏 使用的工具 2024年的WPS是不行的&#xff0c; 如果把知乎网页上的超链接复制到WPS中的Excel中&#xff0c;就会丢掉地址&#xff0c;只剩下网页标题 具体操作&#xff08;转载,在Excel2013上验证可行&#xff09; [1]启用【开发工具】&#xff…

HTTP content-type MIME 类型(IANA 媒体类型)

Content-Type(MediaType)&#xff0c;即是Internet Media Type&#xff0c;互联网媒体类型&#xff0c;也叫做MIME类型。在互联网中有成百上千中不同的数据类型&#xff0c;HTTP在传输数据对象时会为他们打上称为MIME的数据格式标签&#xff0c;用于区分数据类型。最初MIME是用…

【老王最佳实践-6】Spring 如何给静态变量注入值

有些时候&#xff0c;我们可能需要给静态变量注入 spring bean&#xff0c;尝试过使用 Autowired 给静态变量做注入的同学应该都能发现注入是失败的。 Autowired 给静态变量注入bean 失败的原因 spring 底层已经限制了&#xff0c;不能给静态属性注入值&#xff1a; 如果我…

【Linux学习】深入探索进程等待与进程退出码和退出信号

文章目录 退出码return退出 进程的等待进程等待的方法 退出码 main函数的返回值&#xff1a;进程的退出码。 一般为0表示成功&#xff0c;非0表示失败。 每一个非0退出码都表示一个失败的原因&#xff1b; echo $&#xff1f;命令 作用&#xff1a;查看进程退出码。&#xf…

工具推荐:市面上有哪些带有ai问答机器人的SaaS软件

众所周知&#xff0c;SaaS&#xff08;软件即服务&#xff09;模式下的AI问答机器人已经逐渐成为企业、个人在办公、生活和学习中的辅助工具。ai问答机器人凭借高效、便捷、智能的特点&#xff0c;为用户提供了全新的交互体验。本文将推荐几款市面上好用的带有ai问答机器人的Sa…

2024年助贷CRM系统服务商汇总

数字化金融时代&#xff0c;助贷行业的发展呈现出蓬勃的态势。从各大助贷管理系统服务商的纷纷登场&#xff0c;为助贷行业提供了全方位的数字化解决方案。这些系统不仅助力企业实现业务线上化、透明化和合规化&#xff0c;更在助贷服务的专业化和贴心化上发挥着重要作用。以下…

【带你学AI】基于PP-OCR和ErnieBot的字幕提取和智能视频问答

前言 本次分享将带领大家从 0 到 1 完成一个基于 OCR 和 LLM 的视频字幕提取和智能视频问答项目&#xff0c;通过 OCR 实现视频字幕提取&#xff0c;采用 ErnieBot 完成对视频字幕内容的理解&#xff0c;并回答相关问题&#xff0c;最后采用 Gradio 搭建应用。本项目旨在帮助初…

UE5 像素流web 交互2

进来点个关注不迷路谢谢&#xff01; ue 像素流交互多参数匹配 主要运用像素流的解析json 状态&#xff1a; 测试结果&#xff1a; 浏览器控制台&#xff1a; 接下来编写事件传递 关注下吧&#xff01;

C语言 变量的存储类型

今天 我们来说变量的存储类型 变量的存储类型是指系统为变量分配存储区域的方式。 决定着变量存储空间在哪里分配&#xff0c;和变量的生存期、作用域存在着一定联系。 动态存储 函数调用发生时系统根据函数定义的需要动态为其分配的一个栈区&#xff0c;函数调用结束时释放…

刷代码随想录有感(76):回溯算法——全排列

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<int> tmp;vector<vector<int>> res;void backtracking(vector<int> nums, vector<int> used){if(tmp.size() nums.size()){res.push_back(tmp);return;}for(int i 0; i &l…

【Linux】POSIX线程库——线程控制

目录 1.线程创建方法 例&#xff1a;多线程创建 2.线程终止 2.1 return nulptr; 2.2 pthread_exit(nullptr); 3. 线程等待 3.1 等待原因 3.2 等待方法 线程终止的返回值问题 4.线程取消 5. 线程分离 5.1 分离原因 5.2 分离方法 6.封装线程 用的接口是POSIX线程库…

(Java企业 / 公司项目)配置Linux网络-导入虚拟机

公司给了我一个IP地址 &#xff0c;提供了一个虚拟机或者自己搭建虚拟机&#xff0c;还有提供登录的账号密码 可以查看我之前的文章 VMware Workstation Pro 17虚拟机超级详细搭建&#xff08;含redis&#xff0c;nacos&#xff0c;docker, rabbitmq&#xff0c;sentinel&…

Ribbon负载均衡(自己总结的)

文章目录 Ribbon负载均衡负载均衡解决的问题不要把Ribbon负载均衡和Eureka-Server服务器集群搞混了Ribbon负载均衡代码怎么写ribbon负载均衡依赖是怎么引入的&#xff1f; Ribbon负载均衡 负载均衡解决的问题 首先Ribbon负载均衡配合Eureka注册中心一块使用。 在SpringCloud…

学习笔记——STM32F103的V3版本——3*3矩阵键盘控制数码管

一.硬件 1.数码管 2.3*3的矩阵键盘&#xff08;自己做的模块&#xff08;手残党一枚&#xff09;&#xff09; 3.总体连接 二.在Keil5中的部分软代码 test.c中&#xff1a; #include "sys.h" #include "usart.h" #include "delay.h" #include …

1099: 希尔排序算法实现

解法&#xff1a; 希尔增量选定n/2&#xff0c; #include<iostream> #include<vector> using namespace std; int main() {int n;cin >> n;vector<int> vec(n);for (int i 0; i < n; i) cin >> vec[i];int d n / 2;for (int i 0; i <…

大摩:AI PC渗透率到2028年将达65%,联想和戴尔是最大受益者

报告预计&#xff0c;当AI PC的渗透率在2025年达到20%时&#xff0c;PC出货量将加速增长&#xff1b;微软的“CopilotPC”将成为AI PC第一个“杀手级应用”。 报告正文 从苹果M4芯片、高通骁龙X的发布&#xff0c;再到微软推出重磅“CopilotPC”&#xff0c;AI PC逐渐成为市场…

AI应用案例:服务器智能分析管理系统

服务器硬件配置、性能状态、所运行的应用系统等信息分散于多个不同的信息管理系统。人为查询判断现有的服务器资源是否满足用户需求&#xff0c;且需结合资产管理系统与Maximo基础资源、性能监控、运维管理等各个系统互不关联&#xff0c;数据分散不能为运维管理提供完整一致的…

MySql--表的基本查询(CRUD)

CRUD : Create( 创建 ), Retrieve( 读取 ) &#xff0c; Update( 更新 ) &#xff0c; Delete &#xff08;删除&#xff09; 1.insert 基本插入 创建一张表&#xff1a; -- 创建一张学生表 CREATE TABLE students ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, sn INT NO…

【软件设计师】大题

一、数据流图 基础知识 数据流图&#xff08;Data Flow Diagram,DFD&#xff09;基本图形元素&#xff1a; 外部实体&#xff08;External Agent&#xff09; 表示存在于系统之外的对象&#xff0c;用来帮助用户理解系统数据的来源和去向加工&#xff08;Process&#xff09;数…