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

关于对运行中的项目做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插件,可以有效的帮我们生成命令。
在这里插入图片描述
可以右键方法,生成命令到剪贴板里面。
在这里插入图片描述

五、Idea插件

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

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

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

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

相关文章

STL--set和multiset集合

set和multiset会根据特定的排序准则&#xff0c;自动将元素排序。两者不同之处在于multiset 允许元素重复而 set 不允许。如下图: 使用set或multiset&#xff0c;必须先包含头文件: #include <set>上述两个类型都被定义为命名空间std内的class template: namespace std…

亚马逊自养号测评:深入解析与搭建要求

在亚马逊这电商平台上&#xff0c;商品的评价对于卖家来说至关重要。为了提升商品的曝光率、排名、权重和销量&#xff0c;卖家们纷纷采用各种推广方式&#xff0c;其中&#xff0c;亚马逊自养号测评成为了越来越多卖家选择的一种有效方式。 亚马逊自养号测评&#xff0c;顾名…

分布式事务——9种解决方案的原理与分类

目录 一、概要1. 分布式事务的概念2. 分布式事务解决方案分类 二、常见的分布式事务解决方案1. 基础的 2PC&#xff08;二阶段提交&#xff09;1.1 核心思想1.2 简介1.3 主要特点1.3.1 优点1.3.2 缺点 2. 基础的 3PC&#xff08;三阶段提交&#xff09;2.1 核心思想2.2 简介2.3…

C语言/数据结构——每日一题(有效的括号)

一.前言 如果想要使用C语言来解决这道题——有效的括号&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/我们必须要借用上一篇我们所讲的内容——栈的实现&#xff1a;https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…

go routing 之 gorilla/mux

1. 背景 继续学习 go 2. 关于 routing 的学习 上一篇 go 用的库是&#xff1a;net/http &#xff0c;这次我们使用官方的库 github.com/gorilla/mux 来实现 routing。 3. demo示例 package mainimport ("fmt""net/http""github.com/gorilla/mux&…

react实现把pc网站快捷添加到桌面快捷方式

文章目录 1. 需求2. 实现效果3. 核心逻辑4. 完整react代码 1. 需求 这种需求其实在国外一些游戏网站和推广网站中经常会用到&#xff0c;目的是为了让客户 快捷方便的保存网站到桌面 &#xff0c;网站主动尽量避免下次找不到网站地址了&#xff0c;当然精确的客户自己也可以使…

Oracle递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询指定节点的递归路径 六、递归子类 七、递归父类 一、创建表结构和插入数据 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…

GPT提示词技巧,使用教程,国内版官网直达,非套壳

GPT提示词技巧&#xff0c;使用教程&#xff0c;国内版官网直达&#xff0c;非套壳 主站点&#xff1a;https://chatgpt-plus.top&#xff08;江苏福建地区打不开&#xff0c;需要魔法&#xff09; 店铺地址&#xff1a;https://buy.chatgpt-plus.top/ 选择plus账号进入&…

鸿蒙开发ArkUI-X基础知识:【ArkUI代码工程及构建介绍】

代码工程及构建介绍 背景 ArkUI作为OpenHarmony的默认开发框架&#xff0c;在本项目&#xff08;ArkUI-X&#xff09;中需要做到一套代码同时支持多平台构建&#xff0c;所以会采取共仓开发的方式&#xff0c;部分仓直接指向OpenHarmony相关开源仓。 代码结构及仓库结构 代…

【机器学习300问】94、什么是多任务学习?

一、多任务学习的定义 多任务学习&#xff08;Multi-Task Learning, MTL&#xff09;是一种机器学习范式&#xff0c;它允许一个模型同时学习执行多个相关但不完全相同的任务。这种方法的核心是&#xff1a;通过共享表示或权重&#xff0c;不同的任务可以在学习过程中相互促进&…

Python中文件操作和异常处理

文章目录 一、文件操作1.概念2.文件3.二进制 二、基本文件操作三、乱码产生四、with open() as f五、代码实现文件复制粘贴六、try ... except ...七、代码比较 一、文件操作 1.概念 帮助我们把爬虫抓下来的数据&#xff0c;进行保存。 2.文件 在计算机中&#xff0c;没有p…

力扣226. 翻转二叉树(DFS的两种思路)

Problem: 226. 翻转二叉树 文章目录 题目描述思路复杂度Code 题目描述 思路 涉及二叉树的递归解法时往往需要考虑两种思路&#xff1a; 1.在递归遍历时执行题目需要的具体要求&#xff1b; 2.将一个大问题分解为多个小子问题 具体到本体&#xff1a; 思路1&#xff1a;遍历 先…

【源码分享】简单的404 HTML页面示例,该页面在加载时会等待2秒钟,然后自动重定向到首页

展示效果 源码 html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>404 页面未找到</title><meta http-equiv"refresh" content"2;url/"> <!-- 设置2秒后跳转到首…

机器学习云环境测试

等待创建完成后&#xff0c;点击 PyTorch 打开&#xff0c;创建一个全新的 notebook 在 Cell 中输入如下代码&#xff0c;并点击 Run 完成后点击 New Cell &#xff0c;在 New Cell 中输入如下代码 输入完成后点击 Run &#xff0c;运行 New Cell 。&#xff08;每个 Cell 代…

1077: 平衡二叉树的判定

解法&#xff1a; 平衡二叉树是一种特殊的二叉树&#xff0c;它满足以下两个条件&#xff1a; 左子树和右子树的高度差不超过1&#xff08;即&#xff0c;左右子树高度差的绝对值不超过1&#xff09;。左子树和右子树都是平衡二叉树。 后序遍历过程中每次判断左右子树高度差…

IT廉连看——UniApp——事件绑定

IT廉连看——UniApp——事件绑定 这是我们上节课最终的样式&#xff1b; 一、现在我有这样一个需求&#xff0c;当我点击“生在国旗下&#xff0c;长在春风里”它的颜色由红色变为蓝色&#xff0c;该怎么操作&#xff1f; 这时候我们需要一个事件的绑定&#xff0c;绑定一个单…

使用 Docker 部署 Jenkins 并设置初始管理员密码

使用 Docker 部署 Jenkins 并设置初始管理员密码 每一次开始&#xff0c;我都特别的认真与胆怯&#xff0c;是因为我期待结局&#xff0c;也能够不会那么粗糙&#xff0c;不会让我失望&#xff0c;所以&#xff0c;就多了些思考&#xff0c;多了些拘束&#xff0c;所以&#xf…

【HCIP学习】STP协议

一、STP协议出现背景&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09; 二层环路带来的问题&#xff1a;广播风暴&#xff1b; MAC地址表的震荡&#xff1b; 二、STP定义 stp是二层网络中用于消除环路的协议&#xff0c;通过阻断冗余链路来消除&#xff…

加速度传感器的冲击振动的原始特征与解算(部分)

这里是工作中测得的一组数据&#xff0c;设备有多个加速度传感器通道&#xff0c;我们可以看到冲击振动发生前后&#xff0c;各个振动传感器的的反馈以及其他的细化特征&#xff1a; 1.随机振动&#xff08;加速度传感器视角&#xff09; 2.冲击振动&#xff08;加速度&#x…

C++ 网络编程

一、Reactor 网络编程模型 reactor 是一个事件处理模型。网络处理:因为用户层并不知道 IO 什么时候就绪,所以将对 IO 的处理转化为对事件的处理。网络模型构成: 非阻塞 IO:操作 IO,如果 IO 未就绪,IO 函数会立刻返回。IO 多路复用:检测多路 IO 是否就绪。工作流程: 注册…