【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 教程实操 | 线上问题排查思路和手段

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

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

相关文章

伦敦金交易商压箱底的交易技法 居然是……

很多伦敦金交易商&#xff0c;也就是我们常说的伦敦金交易平台&#xff0c;或者伦敦金交易服务提供商&#xff0c;他们会和一些资深的市场分析师合作。另外&#xff0c;一般在这些伦敦金交易商内部&#xff0c;也会有一批高手&#xff0c;他们一边在交易&#xff0c;一边在平台…

【设计模式深度剖析】【3】【创建型】【抽象工厂模式】| 要和【工厂方法模式】对比加深理解

&#x1f448;️上一篇:工厂方法模式 | 下一篇:建造者模式&#x1f449;️ 目录 抽象工厂模式前言概览定义英文原话直译什么意思呢&#xff1f;&#xff08;以运动型车族工厂&#xff0c;生产汽车、摩托产品为例&#xff09; 类图4个角色抽象工厂&#xff08;Abstract Fac…

起底震网病毒的来龙去脉

2010年&#xff0c;震网病毒被发现&#xff0c;引起世界哗然&#xff0c;在后续的10年间&#xff0c;陆陆续续有更多关于该病毒的背景和细节曝光。今年&#xff0c;《以色列时报》和《荷兰日报》又披露了关于此事件的更多信息&#xff0c;基于这些信息&#xff0c;我们重新梳理…

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

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

软件测试:功能测试-接口测试-自动化测试-性能测试-验收测试

软件测试的主要流程 一、测试主要的四个阶段 1.测试计划设计阶段&#xff1a;产品立项之后&#xff0c;进行需求分析&#xff0c;需求评审&#xff0c;业务需求评级&#xff0c;绘制业务流程图。确定测试负责人&#xff0c;开始制定测试计划&#xff1b; 2.测试准备阶段&…

不小心丢失mfc140u.dll文件怎么办?mfc140u.dll丢失的解决办法

当您发现mfc140u.dll文件不见了或者受损&#xff0c;别担心&#xff0c;我们可以一起解决这个问题&#xff01;首先&#xff0c;您可能会注意到一个小提示&#xff0c;当您尝试打开某些程序时&#xff0c;屏幕上会跳出一个消息说“找不到mfc140u.dll”或者“mfc140u.dll文件缺失…

心识宇宙 x TapData:如何加速落地实时数仓,助力 AI 企业智慧决策

使用 TapData&#xff0c;化繁为简&#xff0c;摆脱手动搭建、维护数据管道的诸多烦扰&#xff0c;轻量代替 OGG、DSG 等同步工具&#xff0c;「CDC 流处理 数据集成」组合拳&#xff0c;加速仓内数据流转&#xff0c;帮助企业将真正具有业务价值的数据作用到实处&#xff0c…

Python的selenium爬取

1.selenium 1.1.前言 使用python的requests模块还是存在很大的局限性&#xff0c;例如&#xff1a;只发一次请求&#xff1b;针对ajax动态加载的网页则无法获取数据等等问题。特此&#xff0c;本章节将通过selenium模拟浏览器来完成更高级的爬虫抓取任务。 1.2.什么是seleniu…

学习单向链表带哨兵demo

一、定义 在计算机科学中&#xff0c;链表是数据元素的线性集合&#xff0c;其每个元素都指向下一个元素&#xff0c;元素存储上并不连续。 1.可以分三类为 单向链表&#xff0c;每个元素只知道其下一个元素是谁 双向链表&#xff0c;每个元素知道其上一个元素和下一个元素 …

抖音小店不能做无货源了吗?当然不是,而是玩法更先进了!

大家好&#xff0c;我是电商糖果 自从2023年抖音小店开始严查无货源&#xff0c;不少商家被平台处罚&#xff0c;被逼无奈退出抖音小店。 网上关于抖音小店不能做无货源的声音越来越多。 可是一年多过去&#xff0c;大家渐渐的发现&#xff0c;平台内还是有很多无货源商家&a…

Sping源码(八)—registerBeanPostProcessors

序言 之前我们用大量的篇幅介绍过invokeBeanFactoryPostProcessors()方法的执行流程。 而invokeBeanFactoryPostProcessors的主要逻辑就是遍历执行实现了BeanDefinitionRegistryPostProcesso类(主要是针对BeanDefinition的操作)和BeanFactoryPostProcessor(主要针对BeanFacrot…

spring-boot集成slf4j(二)logback配置详解

一、configuration 根节点&#xff1a;configuration&#xff0c;作为顶级标签&#xff0c; 可以用来配置一些lockback的全局属性&#xff0c;常见的属性如下&#xff1a; &#xff08;1&#xff09;scan“true” &#xff1a;scan是否开启自动扫描&#xff0c;监控配置文件更…

XShell-连接-Centos 7

XShell 连接Centos 7 一.准备 安装XShell XShell下载地址&#xff1a; 在虚拟机上安装Centos 7&#xff0c;具体操作自行学习 二.Centos 7的准备 1.网络适配器修改为NAT 2.获取IP 输入命令&#xff1a; ip addr我的Centos 7对外IP为192.168.174.129 三.XShell连接Cento…

Big Demo Day第十三期活动即将启幕,Web3创新项目精彩纷呈,PEPE大奖等你抽取

5月28号在香港数码港 Big Demo Day第十三期 活动即将拉开帷幕&#xff0c;活动将汇集众多Web3领域的创新项目&#xff0c;为参会者带来一场科技与智慧交融的盛宴。在这里&#xff0c;你不仅能深入了解区块链、AI等前沿技术的最新应用&#xff0c;还能有机会赢取丰厚的PEPE大奖。…

使用maven-helper插件解决jar包冲突

发现问题 maven-helper分析问题 如上所述&#xff0c;问题就是依赖版本冲突了&#xff0c;出现版本冲突的原因是因为由于Maven具有依赖传递性&#xff0c;所以当你引入一个依赖类的同时&#xff0c;其身后的依赖类也一起如过江之鲫纷至沓来了。 举个例子&#xff1a;   A依赖…

保护元件-详实的熔断器(保险丝)知识

目录&#xff1a; 一、汽车保险丝设计与选型 1、概述 2、构造及工作原理 1&#xff09;构造 2&#xff09;工作原理 3&#xff09;保险丝熔断及分断时间 4&#xff09;时间/电流特性曲线 5&#xff09;环境温度修正系数 3、熔化热能值I2t★ 4、三种电流模型 1&a…

废物回收机构|基于SprinBoot+vue的地方废物回收机构管理系统(源码+数据库+文档)

地方废物回收机构管理系统 目录 基于SprinBootvue的地方废物回收机构管理系统 一、前言 二、系统设计 三、系统功能设计 1管理员功能模块 2 员工功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…

瑞芯微RV1126——人脸识别框架分析

项目核心是在Linux平台上利用摄像头采集人脸&#xff0c;并进行人脸识别。这个项目使用的是FFMPEGOPENCV虹软框架完成。 FFMPEG的主要工作是负责采集摄像头的数据并把摄像头数据发送给opencv。 Opencv的主要工作则是把摄像头数据转换成矩阵数据。 虹软的主要功能则是利用Open…

K8s 二进制部署---下篇(多master节点 负载均衡 高可用)

一 master02 节点部署 master01192.168.11.5kube-apiserver&#xff0c;kube-controller-manager&#xff0c;kube-scheduler&#xff0c;etcdmaster02192.168.11.12kube-apiserver&#xff0c;kube-controller-manager&#xff0c;kube-scheduler&#xff0c;etcdnode01192.1…

WebGL渲染引擎优化方向——渲染帧率的优化

作者&#xff1a;caven chen 对此内容感兴趣还可以看前文&#xff1a; WebGL渲染引擎优化方向——加载性能优化 前言 WebGL 是一种强大的图形渲染技术&#xff0c;可以在浏览器中快速渲染复杂的 3D 场景。但是&#xff0c;由于 WebGL 的高性能和高质量要求&#xff0c;如果…