Java 诊断利器 Arthas 快速入门

news2024/11/26 14:52:20

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

一、Arthas 快速入门

1.1、下载arthas

        下载地址:GitHub Arthas Releases

        解压 arthas-bin.zip, 其中 math-game.jar 是一个官方提供的demo,arthas-boot.jar 是arthas的主要程序。

1.2、启动math-game.jar

        math-game是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。

1.3、启动arthas

        Arthas会attach到目标进程上,所以在启动的时候会列出系统当前的java进程,输入需要查看的进程,就可以将Arthas attach到选择的进程上。

        Arthas启动成功后,界面如下图所示:

        与此同时,官方也提供了web界面供大家使用,通过访问 http://localhost:3658 可以进入Arthas 界面。 

二、Arthas 命令

        Arthas 提供了基础命令、jvm 相关、class/classloader 相关、monitor/watch/trace 相关、profiler/火焰图等命令。

       Arthas命令列表

2.1、jvm 相关

  • dashboard:当前系统的实时数据面板
  • getstatic:查看类的静态属性
  • heapdump:dump java heap, 类似 jmap 命令的 heap dump 功能
  • jvm:查看当前 JVM 的信息
  • logger:查看和修改 logger
  • mbean:查看 Mbean 的信息
  • memory:查看 JVM 的内存信息
  • ognl:执行 ognl 表达式
  • perfcounter:查看当前 JVM 的 Perf Counter 信息
  • sysenv:查看 JVM 的环境变量
  • sysprop:查看和修改 JVM 的系统属性
  • thread:查看当前 JVM 的线程堆栈信息
  • vmoption:查看和修改 JVM 里诊断相关的 option
  • vmtool:从 jvm 里查询对象,执行 forceGc

2.2、class/classloader 相关

  • classloader:查看 classloader 的继承树,urls,类加载信息,使用 classloader 去 getResource
  • dump:dump 已加载类的 byte code 到特定目录
  • jad:反编译指定已加载类的源码
  • mc:内存编译器,内存编译.java文件为.class文件
  • redefine:加载外部的.class文件,redefine 到 JVM 里
  • retransform:加载外部的.class文件,retransform 到 JVM 里
  • sc:查看 JVM 已加载的类信息
  • sm:查看已加载类的方法信息

2.3、 monitor/watch/trace 相关

  • monitor:方法执行监控
  • stack:输出当前方法被调用的调用路径
  • trace:方法内部调用路径,并输出方法路径上的每个节点上耗时
  • tt:方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
  • watch:方法执行数据观测

这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。

 2.4、 基础命令

  • base64:base64 编码转换,和 linux 里的 base64 命令类似
  • cat:打印文件内容,和 linux 里的 cat 命令类似
  • cls:清空当前屏幕区域
  • echo:打印参数,和 linux 里的 echo 命令类似
  • grep:匹配查找,和 linux 里的 grep 命令类似
  • help:查看命令帮助信息
  • history:打印命令历史
  • keymap:Arthas 快捷键列表及自定义快捷键
  • pwd:返回当前的工作目录,和 linux 命令类似
  • quit:退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
  • reset:重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
  • session:查看当前会话的信息
  • stop:关闭 Arthas 服务端,所有 Arthas 客户端全部退出
  • tee:复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似
  • version:输出当前目标 Java 进程所加载的 Arthas 版本号

三、 Arthas 常用命令介绍

3.1、dashboard

        dashboard:当前系统的实时数据面板

3.2、thread

        thread 查看当前线程信息,查看线程的堆栈,thread --all 命令可以显示所有匹配的线程 ,thread id 可以显示指定线程的运行堆栈。

        thread 1 会打印线程ID 1的栈,通常是main函数的线程,这样就获取到arthas-demo进程的Main Class信息。

3.3、jad

       jad 命令用来反编译指定已加载类的源码。通过 jad 命令反编译 MathGame 类。

jad demo.MathGame

3.4、watch

        watch 命令用来函数执行数据观测,通过 watch 命令来查看 demo.MathGame#primeFactors 函数的返回值。

3.5、jvm

        通过jvm命令,我们可以查看当前 JVM 信息

3.6、memory

        通过 memory 命令可以查看 JVM 内存信息。

四、附录

如果想详细了解每个命令的,可以参考下面文章

1、JVM命令相关

https://blog.csdn.net/zhangchaoyang/article/details/127954666

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

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

相关文章

ORB-SLAM2 --- LocalMapping::KeyFrameCulling函数

目录 1.函数作用 2.code 3.函数解析 1.函数作用 检测当前关键帧在共视图中的关键帧,根据地图点在共视图中的冗余程度剔除该共视关键帧。 冗余关键帧的判定:90%以上的地图点能被其他关键帧(至少3个)观测到。 2.code /*** brie…

第七次作业部分

文章目录1、获取根分区剩余大小2、获取当前机器ip地址3、统计出apache的access.log中访问量最多的5个IP4、打印/etc/passwd中UID大于500的用户名和uid5、/etc/passwd 中匹配包含root或net或ucp的任意行6、处理以下文件内容,将域名取出并根据域名进行计数排序处理(百度搜狐面试题…

透过现象看本质,我找到了Netty粘包与半包的这几种解决方案。

1、粘包与半包 啥也不说了,直接上代码是不是有点不太友好,我所谓了,都快过年了,还要啥自行车 我上来就是一段代码猛如虎 1.1 服务器代码 public class StudyServer {static final Logger log LoggerFactory.getLogger(StudyS…

ORB-SLAM2 --- ORBmatcher::Fuse函数 --- 局部建图线程调用重载版

目录 1.函数作用 2.code 3.函数解析 1.函数作用 将参数一的关键帧的地图点与参数二的地图点集合进行融合。 将地图点投影到关键帧中进行匹配和融合;融合策略如下: 1.如果地图点能匹配关键帧的特征点,并且该点有对应的地图点&…

六、k8s Pod控制器详解

1 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod&#x…

异常处理部分

文章目录一、异常概述及体系结构分类ErrorException异常的体系结构异常处理:抓抛模型异常处理机制一:try-catch-finallyfinally的使用异常处理机制一:throws异常类型如何选择两种方式手动生成异常对象如何定义自定义的异常类一、异常概述及体…

JVM学习- - -虚拟机栈详解

前言:今天学长带领大家走进JVM学习,让我们一起来学习认识虚拟机栈吧~ 目录 1 虚拟机栈概述 虚拟机栈出现的背景 初步印象 内存中的栈和堆 虚拟机栈基本内容 栈的优点 2 栈的存储单位 栈中存储什么? 栈运行原理 栈帧的内部结构 3 局…

【云原生】k8s之存储卷

内容预知 前言 1.emptyDir存储卷 2.hostPath存储卷 3.nfs共享存储卷 4. PVC 和 PV的静态存储卷 4.1 pv和pvc的介绍 4.2 pvc 和pv的创建过程及销毁过程 4.3 对pv的操作指导 4.4 静态创建pv和pvc资源由pod运用过程 步骤一:在NFS主机上创建共享目录,…

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

因工作需要,需要将目标检测模型 部署在开发板上。在走了很多弯路后 找到一个成功的案例并记载下来 这里说一下我现有的硬件设备 。 我是购买的RADXA的rock3a开发板 搭载的soc是rk3568 这是开发板的正面图,因为瑞芯微针对计算机视觉中的目标检测模型有一…

Java IO流 - 缓冲流的详细使用介绍

文章目录缓冲流缓冲流概述字节缓冲流字符缓存流缓冲流 缓冲流概述 缓冲流介绍: 缓冲流也称为高效流、或者高级流。之前学习的字节流和字符流可以称为原始流。 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能 缓冲流分为: 字节缓存输入流、字节…

做个测试工具

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

uniapp中引入vant Weapp

Vant Weapp官:https://vant-contrib.gitee.io/vant-weapp/#/home 步骤一:下载vant组件插件 从github上下载该插件https://github.com/youzan/vant-weapp 只要这个dist文件夹,把dist重命名为vant; 步骤二: 与pages…

301-295- 至少有 K 个重复字符的最长子串-0105

题解 本题使用分治策略,如果某个字符的出现次数小于k,则用它将数组分开,再把每个子数组组委参数递归执行.如果都大于k,则将该字符串的长度返回. 用一个字符分割,往深了分割各子字符串,这个字符分割完成,使用另一个字符进行分割,而不是一次用多个字符进行分割.这个题递归有些绕…

电脑怎么重装系统?小白也能轻松掌握这些方法

重新安装计算机系统有两种原因:一种是计算机系统可以正常使用,但是电脑比较卡,为了提高它的运行速度,所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失,系统出现蓝屏,或…

MQ概念简介

队列管理器 队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。 2) 消息 在MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进行广义的理解,比如:用户的各种类…

机器学习100天(二十九):029 K折交叉验证

机器学习100天,今天讲的是:K 折交叉验证! 《机器学习100天》完整目录:目录 机器学习中,我们常会遇到一个问题,就是超参数的选择,超参数就是机器学习算法中的调优参数,比如上一节 K 近邻算法中的 K 值。K 折交叉验证就是帮助我们选择最优的超参数。 首先,介绍一下简…

FPGA并行计算可编程芯片

玩转Zynq可以使用Vivado创建一个FPGA工程。什么是FPGA前言自FPGA诞生以来,FPGA(现场可编程门阵列)就引起了人们的关注。在1980年代中期,Ross Freeman和他的同事从Zilog购买了该技术,并创建了Xilinx,目标是A…

基于Java+SpringBoot+vue+node.js实现自行车租赁平台管理系统

基于JavaSpringBootvuenode.js实现自行车租赁平台管理系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于JavaSp…

netmap: UDP 协议栈的实现

文章目录1、获取以太网数据1.1、netmap 原理1.2、netmap 环境搭建2、udp 协议栈的实现2.1、以太网帧2.2、ip 协议2.3、udp 协议2.4、问题分析3、ARP 协议的实现4、icmp 协议的实现5、netmap 代码实现1、获取以太网数据 自定义协议栈,需要获取原始的以太网数据&…

第50问:从连接判断应用访问数据库的异常行为

问 我发现应用有一根访问数据库的连接有异常流量,如何判断是应用哪个逻辑导致了异常行为 实验 先起锅烧一个数据库实例: 我们用 mysqlslap 作为应用: 假设在 MySQL 中,我们认为这根连接有异常流量: 通过 ss 找到这根…