Arthas下载安装及使用介绍

目录

    • 一、简介
      • 1.1 什么是 Arthas?
      • 1.2 Arthas 可以做些什么?
    • 二、下载安装、卸载
      • 2.1 安装方式一:在线安装
      • 2.2 安装方式二:离线安装
      • 2.3 卸载
    • 三、常见操作
      • 3.1 dashbord 信息面板
      • 3.2 thread 线程信息
      • 3.3 jad 反编译 class 文件
      • 3.4 watch 监控方法的入参、出参
        • 1)监控入参
        • 2)监控出参
      • 3.5 sc 查看 JVM 已加载的类信息
      • 3.6 sm 查看已加载类的方法信息
      • 3.7 profiler 生成火焰图

在这里插入图片描述

  • 官网网址: https://arthas.gitee.io/
  • 官方文档:https://arthas.gitee.io/doc/quick-start.html
  • GitHub: https://github.com/alibaba/arthas

一、简介

1.1 什么是 Arthas?

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

Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用 命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

1.2 Arthas 可以做些什么?

Arthas 可以帮你解决以下常见问题:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 是否一个全局视角来查看系统的运行状况?
  5. 有什么办法可以监控到 JVM 的实时运行状态?
  6. 怎么快速定位应用的热点,生成火焰图?
  7. 怎样直接从 JVM 内查找某个类的实例?

二、下载安装、卸载

2.1 安装方式一:在线安装

执行如下命令:

(需要使用和目标进程一致的用户启动,否则可能 attack 失败)

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

选择 java 进程:

$ $ java -jar arthas-boot.jar
* [1]: 35542
  [2]: 71560 demo.jar

我们的示例 java 进程是第 2 个,则输入 2,再输入回车。Arthas 就会 attach 到目标进程上,并输出日志:

[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'


wiki: https://arthas.aliyun.com/doc
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24

$

如果是第一次启动,会自动下载 Arthas 的相关文件:

我们可以看到,在 Windows 中默认安装目录为:

# 文件位置
C:\Users\Administrator\.arthas\lib\3.7.2\arthas\
# 日志位置
C:\Users\Administrator\logs\arthas\

在这里插入图片描述

在 Linux 中安装也是一模一样的,只不过默认安装路径为:

# 文件位置
~/.arthas/
# 日志位置
~/logs/arthas/

2.2 安装方式二:离线安装

比如要下载 3.7.2 版本,下载的 url 是:

https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.7.2/arthas-packaging-3.7.2-bin.zip

下载后文件如下所示:

在这里插入图片描述

压缩包内容如下所示:

在这里插入图片描述

如果是 Windows 平台,解压后,直接使用如下命令启动即可:

java -jar arthas-boot.jar

如果是 Linux 平台,可以使用以下命令解压到指定的 arthas 目录:

unzip -d arthas arthas-packaging-3.7.2-bin.zip

执行结果如下所示:

在这里插入图片描述

2.3 卸载

在 Windows 平台,卸载只需要直接删除以下两个目录即可:

  • 文件目录:C:\Users\Administrator\.arthas\lib\3.7.2\arthas\
  • 日志目录:C:\Users\Administrator\logs\arthas\

在 Linux 平台,卸载只需要执行如下命令删除文件即可:

rm -rf ~/.arthas/
rm -rf ~/logs/arthas/

三、常见操作

3.1 dashbord 信息面板

输入 dashboard,回车即可看到信息面板:

在这里插入图片描述

Ctrl + C 即可中断刷新,并推出 dashboard。

3.2 thread 线程信息

输入 thread 命令,即可看到当前 Java 进程的所有线程信息:

在这里插入图片描述

使用 thread 线程ID 命令,即可查看线程的调用栈信息:

在这里插入图片描述

3.3 jad 反编译 class 文件

使用 jad 包名.类名 命令,即可对指定类文件进行反编译:

在这里插入图片描述

小知识: 在类名上右键 -> Copy/Paste Special -> Copy Reference,即可同时拷贝包名+类名。

在这里插入图片描述

3.4 watch 监控方法的入参、出参

1)监控入参

比如,我们想监控 DemoController 类的 test() 方法的入参,可以使用如下命令:

watch com.demo.controller.DemoController test params

请求地址:http://localhost:8080/demo/test?key=123

执行结果如下:

在这里插入图片描述

可以看到,入参是一个值为 123 的 String 类型对象。使用 Q 或者 Ctrl + C 就可以退出。

2)监控出参

比如,我们想监控 DemoController 类的 test() 方法的出参,可以使用如下命令:

watch com.demo.controller.DemoController test returnObj

请求地址:http://localhost:8080/demo/test?key=123

执行结果如下:

在这里插入图片描述

可以看到,这里返回了一个 Result 对象,里面的数据也具体打印出来了。

3.5 sc 查看 JVM 已加载的类信息

sc 命令,是 “Search-Class” 的缩写,这个命令能搜索出所有已加载到 JVM 中的 Class 信息,支持通配符

举个例子,使用 sc com.demo.* 可以对包下的类进行模糊搜索:

在这里插入图片描述

使用 sc -d 包名.类名 命令,可以打印类的详细信息:

在这里插入图片描述

3.6 sm 查看已加载类的方法信息

sm 命令,是 “Search-Method” 的缩写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。

注意: sm 命令只能看到由当前类所声明(declaring)的方法,无法看到父类方法。

举个例子,查看 java.lang.String 中的所有方法,可以使用如下命令:

sm java.lang.String

执行结果如下:

也可以查看 java.lang.String 中的某个方法,可以使用如下命令:

# 查看某个方法
sm java.lang.String toString
# 查看某个方法的详细信息
sm -d java.lang.String toString

3.7 profiler 生成火焰图

profiler 命令支持生成应用热点的火焰图。本质上是通过不断地采样,然后把收集到的采样结果生成火焰图。

注意: 目前 profiler 生成火焰图的功能只支持在 Linux/Mac 系统中进行。

首先,启动 profiler,命令如下:

profiler start

在这里插入图片描述

获取已采集的 sample 的数量,命令如下:

profiler getSamples

在这里插入图片描述

查看 profiler 状态,命令如下:

profiler status

在这里插入图片描述

停止 profiler,并生成 html 文件,命令如下:

# 默认生成 html 文件
profiler stop

在这里插入图片描述

也可以指定 html 文件的生成位置,命令如下:

profiler stop --file /tmp/result.html

在这里插入图片描述

我们可以通过浏览器查看 arthas-output 下面的 profiler 结果。默认情况下,arthas 使用 3658 端口,我们可以访问如下地址:http://localhost:3658/arthas-output/

在这里插入图片描述

点击就可以查看具体的结果了:

在这里插入图片描述

图中横向长度越长的方法执行时间越长,一般绿色是我们自己的代码,黄色代表 JVM 底层的代码。

默认情况下,生成的是 CPU 的火焰图,即 event 为 CPU,可以使用 --event 参数来指定。在不同的平台,不同的 OS 下面,支持的 events 各有不同,比如在 MacOS 下面:

$ profiler list
Basic events:
  cpu
  alloc
  lock
  wall
  itimer

在 Linux 下面:

$ profiler list
Basic events:
  cpu
  alloc
  lock
  wall
  itimer
Perf events:
  page-faults
  context-switches
  cycles
  instructions
  cache-references
  cache-misses
  branches
  branch-misses
  bus-cycles
  L1-dcache-load-misses
  LLC-load-misses
  dTLB-load-misses
  mem:breakpoint
  trace:tracepoint

例如,我们相对 alloc 事件进行采样,我们可以用 --event 参数指定要采样的事件:

profiler start --event alloc

除此之外,我们还可以配置 include/exclude 来过滤数据。如果应用比较复杂,生成的内容很多,想只关注部分数据,可以通过 include/exclude 来过滤,比如:

profiler start --include 'java/*' --include 'demo/*' --exclude '*Unsafe.park*'

补充:include/exclude 都支持设置多个值,但是需要配置在命令行的最后。

整理完毕,完结撒花~🌻

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

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

相关文章

keil把c语言函数转成汇编

汇编可以让开发人员从根源上理解程序的运行逻辑,本文介绍如何在keil环境下如何把一个c文件中的某一个函数,转换为汇编函数,并编译运行。 右击某个c文件,选择Option for File。。。 图1 然后把下图中的Generate Assembler SRC Fi…

Linux I2C(二) - I2C软硬件架构

1,I2C的总线拓扑 2,I2C S/W topology linux kernel I2C framework使用如下的软件拓扑抽象I2C硬件(我们可以一起领会一下其中的“设备模型”思想): 1)platform bus(/sys/bus/platform&#xff0…

【论文笔记 | 异步联邦】 FedBuff

1. 论文信息 Federated Learning with Buffered Asynchronous Aggregation,International Conference on Artificial Intelligence and Statistics,2022,ccfc 2. introduction 2.1.1. 背景: 同步 FL ,随训练过程中…

3D MINS 多模态影像导航系统

3D MINS多模态影像导航系统(Multimodal Image Navigation System)是SunyaTech研发的建立在DICOM(Digital Imaging and Communications in Medicine)图像基础之上的多模态影像导航系统,集二维影像PACS管理、三维影像层级…

在誉天学习云计算HCIE,担心考试考不过?

誉天定制化课程内容覆盖了所有考试重点,可以系统地掌握理论与实践知识。 对于笔试,类似于备考驾照理论学习阶段,誉天为大家提供在线模拟测试系统,帮助大家掌握云计算笔试考点。笔试通过后,18个月内(一年半…

html显示PDF并兼容IE浏览器的解决方案

方案一、vue-pdf插件 缺点&#xff1a;IE11显示空白&#xff0c;编译后的Edge测试环境可以正常线上&#xff0c;打到线上报错&#xff0c;谷歌和百分浏览器显示完美 1、vue 只显示核心代码&#xff0c;需要安装vue-pdf插件 <vue-pdf :src"ivcPdfUrl"></v…

【51单片机项目】基于51单片机自制多功能小键盘/模拟USB键盘【附源码】(STC89C52RC+CH9328)

目录 一、效果展示 二、创作灵感 三、硬件电路 注意事项 工作原理 四、源码 main.c 五、附录 CH9328工作原理 CH9328的模式选择 ​编辑 全键盘键码值表 参考链接 一、效果展示 该小键盘具有三种功能&#xff1a; 1、自动输入开机密码 2、每隔一段时间自动按下ct…

展商企业【广东伟创科技开发有限公司】| 2024水科技大会暨技术装备成果展

企业介绍 广东伟创科技开发有限公司成立于2006年&#xff0c;位于广东省江门市。公司是华南理工大学造纸与污染控制国家工程研究中心科技成果转化单位&#xff1b;是华南理工大学产学研合作单位&#xff1b;是广东省高新技术企业&#xff1b;是江门市现代信息服务业重点企业&am…

HarmonyOS ArkUI实战开发-手势密码(PatternLock)

ArkUI开发框架提供了图案密码锁 PatternLock 组件&#xff0c;它以宫格图案的方式输入密码&#xff0c;用于密码验证&#xff0c;本节读者简单介绍一下该控件的使用。 PatternLock定义介绍 interface PatternLockInterface {(controller?: PatternLockController): PatternL…

CSS中的层叠上下文

HTML 文档中的三维概念 平时我们从设备终端看到的 HTML 文档都是一个平面的&#xff0c;事实上 HTML 文档中的元素却是存在于三个维度中。除了大家熟悉的平面画布中的 x 轴和 y 轴&#xff0c;还有控制第三维度的 z 轴。 其中 x 轴通常用来表示水平位置&#xff0c;y 轴来表示…

爱普生RX-8130CE内置电池控制 RTC

特点&#xff1a;(1)封装极小&#xff0c;集成度高RX-8130CE是一个带|2C接口的实时时钟模块&#xff0c;内部集成32.768KHz晶体振荡器。实时时钟功能不仅集成了年、月、日、星期、小时、分、秒的日历和时钟计数器&#xff0c;同时也有时间闹钟、间隔定时器、时间更新中断等功能…

Qt [获取Dump] 使用WindowsAPI实现生成MiniDump文件

说明 客户现场的软件偶发崩溃是程序开发者&#xff0c;比较头疼的事情。如何更快速的定位到问题点和解决掉&#xff0c;是开发应该具备的基本能力。 Windows提供了一系列的API&#xff0c;可以记录软件崩溃前的堆栈信息。下面就实现一个生成Dump文件的程序实例。 主要代码 回…

unity读写本地excel_2024.4.22

using System.Collections; using System.Collections.Generic; using UnityEngine; using OfficeOpenXml; using System.IO; using Excel; using System.Data; using System; /// <summary> /// https://blog.csdn.net/Xz616/article/details/128893023 /// Unity3D操作…

JVM垃圾收集器--分代收集器

垃圾收集器主要分为两大类&#xff1a;分区收集器和分代收集器。分代收集器的代表是CMS&#xff0c;分区收集器的代表是G1和和ZGC。 分代收集器 CMS CMS收集器是第一个关注GC停顿时间&#xff08;stw时间)的收集器&#xff0c;采用“标记-清除”算法&#xff0c;之前的垃圾收…

《动手学深度学习(Pytorch版)》Task01:初识深度学习——4.22打卡

深度学习介绍 AI地图 自然语言处理&#xff1a;起源于符号学&#xff0c;如机器翻译&#xff0c;人在几秒钟能反应过来&#xff0c;属于感知问题计算机视觉&#xff1a;图片由像素组成&#xff0c;难以用符号学解释&#xff0c;在图片中进行推理&#xff0c;大部分用概率模型或…

Nginx+Lua+OpenResty(详解及使用)

一、 Nginx简介 Nginx是一个高性能的Web服务器和反向代理的软件。 Web服务器&#xff1a;就是运行我们web服务的容器&#xff0c;提供web功能&#xff0c;还有tomcat也提供类似的功能。 代理是软件架构和网络设计中&#xff0c;非常重要的一个概念。 二、Nginx的反向代理&…

Scrapy爬虫框架入门(豆瓣电影Top 250)

文章目录 Scrapy 官网Scrapy 文档GithubScrapy 简介项目结构爬虫实现XPath 教程创建 Scrapy 项目配置用户代理网页 dom 元素 IP 代理池IP代理池作用配置IP代理池申请IP代理池 Scrapy 官网 https://scrapy.org/ Scrapy 文档 https://docs.scrapy.org/en/latest/ Github htt…

Opencv_2_ 图像色彩空间转换

ColorInvert.h 内容如下&#xff1a; #pragma once #include <opencv.hpp> using namespace std; #include <opencv.hpp> using namespace cv; using namespace std; class ColorInvert{ public : void colorSpaceInvert(Mat&image); }; ColorInvert.cpp…

构建云原生湖仓:Apache Iceberg与Amoro的结合实践

随着大数据技术的快速发展&#xff0c;企业对数据的处理和分析需求日益增长。传统的数据仓库已逐渐无法满足现代业务对数据多样性和实时性的要求&#xff0c;这促使了数据湖和数据仓库的融合&#xff0c;即湖仓一体架构的诞生。在云原生技术的推动下&#xff0c;构建云原生湖仓…

数据库服务类--Redis--未授权访问终端Getshell

免责声明:本文仅做技术交流与学习. 目录 前提条件: windows上开启redis服务: Linux上创建&开启redis服务: 操作: 1-连接靶机redis 2-写入webshell 3-访问后门 redis--->webshell Redis未授权访问漏洞复现与利用 - 知乎 (zhihu.com) 前提条件: 端口开放(6379) 目录…