Arthas的使用与进阶

news2024/12/27 11:45:04

Arthas的使用与进阶

  • Arthas使用与进阶
  • 一、概述
  • 二、快速安装
    • windows下安装arthas
    • Linux下安装arthas
    • 卸载
      • 在Linux/Unix/Mac平台
      • Windows平台
  • 三、快速入门:attach一个进程
    • 1、准备
    • 2、启动arthas
  • 四、快速入门:常用命令接触
    • 命令介绍
    • 1、dashboard仪表板
    • 2、通过Thread命令来获取到arthas的进程的Main Class
    • 3、通过jad反编译Main Class
    • 4、watch监视
    • 5、退出arthas
  • 五、基础命令
    • 1、help
    • 2、cat
    • 3、grep
    • 4、pwd
    • 5、cls
    • 6、session
    • 7、reset
    • 8、version
    • 9、history
    • 10、quit
    • 11、stop
    • 12、keymap
    • 13、arthas命令行快捷键
    • 后台异步命令相关快捷键
  • 六、JVM相关命令
    • 1、dashboard
    • 2、Thread
    • 3、jvm、sysprop
    • 4、sysprop
    • 5、sysenv
    • 6、vmoption
    • 7、getstatic
    • 8、ognl

Arthas使用与进阶

一、概述

Arthas是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

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

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

二、快速安装

下载arthas-boot.jar,然后使用java -jar的方式启动。

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

windows下安装arthas

如图,我这里先进入F盘,新建一个文件夹,用来存放Arthas文件。

然后进入该目录,下载Arthas。

在这里插入图片描述

注意,在运行第二条命令之前,先运行一个java进程在内存中,不然会出现找不到java进程的错误。

打印帮助信息

java -jar arthas-boot.jar -h

如果下载速度比较慢,可以使用aliyun的镜像

java -jar arthas-boot.jar --repo-mirror aliyun --use-http

然后我们使用java -jar arthas-boot.jar运行Arthas。

在这里插入图片描述

这时Arthas会发现我们本地是没有Arthas的安装包的,这时会提示我们选择,这里我们选择2,1是我们在本地运行的Java进程。

选择2就会从网上去下载Arthas,从maven仓库中下载。

在这里插入图片描述

然后我们可以根据输出日志的文件存放路径,找到刚才下载的文件,我这里C:\Users\zal\.arthas\lib\3.6.6\arthas,是如图:

在这里插入图片描述

安装好之后会在C:\Users\zal该路径下生成两个文件夹,一个是.arthas,一个是logs,安装好的界面如图:

在这里插入图片描述

Linux下安装arthas

linux下安装arthas其实是和windows下安装的过程差不多。

首先下载jar包,使用命令curl -O https://arthas.aliyun.com/arthas-boot.jar

下载完成之后启动jar包,如图:

在这里插入图片描述

我们随便选择一个java进程之后,就会进入arthas的下载。

在这里插入图片描述

安装好的arthas文件会隐藏,所以我们使用ls -a来查看。

在这里插入图片描述

退出arthas

quit

卸载

在Linux/Unix/Mac平台

删除下面的文件

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

Windows平台

直接删除user home下面的.arthaslogs/arthas目录即可。

在这里插入图片描述

小结

因为jar包是绿色的,要卸载的话,直接删除两个目录即可。

1、arthas安装目录

2、arthas的日志记录目录

三、快速入门:attach一个进程

目标:通过案例快速入门

  • 执行一个jar包
  • 通过arthas来attach
  • 进行几种常用的命令操作

步骤

1、准备

我们直接使用arthas安装好之后自带的jar包进行快速入门,如图。

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

在这里插入图片描述

然后我们重新打开一个连接窗口,去进行使用arthas操作。

2、启动arthas

在这里插入图片描述

(1)如果粘附成功,在math-game.jar的那个窗口中会出现日志记录的信息。

(2)如果端口号被占用,也可以通过以下命令换成另一个端口号执行

java -jar arthas-boot.jar --telnet-port 9992 -http-port -1

我们也可以通过浏览器访问arthas,如图,访问该地址

在这里插入图片描述

访问127.0.0.1:3658,注意这里的ip地址是127.0.0.1,不是你的服务器ip或者是虚拟机ip。

在这里插入图片描述

我们也可以直接在浏览器中直接输入命令进行操作。

小结

  • 启动被诊断进程
  • 启动arthas-boot.jar,粘贴上面的进程
  • 不但可以通过命令行的方式来操作arthas,也可以通过浏览器来进行访问。

四、快速入门:常用命令接触

目标

  • dashboard仪表盘
  • 通过thread命令来获取到math-game进程的 Main Class
  • 通过jad来反编译Main Class
  • watch

命令介绍

1、dashboard仪表板

输入dashboard,按回车/enter ,会展示当前进程的信息,按ctrl + c可以中断执行。

注:输入前面部分的字母,按tab可以自动补全命令

  • 第一部分是显示JVM中运行的所有线程:所在线程组、优先级、线程状态、cpu占用率、是否是后台进程等
  • 第二部分显示的JVM内存的使用情况
  • 第三部分是操作系统的一些信息和Java版本号

在这里插入图片描述

q或者ctrl+c可以退出。

cls清屏

2、通过Thread命令来获取到arthas的进程的Main Class

使用命令Thread查看所有线程。

在这里插入图片描述

使用命令thread 1会打印线程ID为1的线程的栈,通常是Main函数的线程。

在这里插入图片描述

3、通过jad反编译Main Class

在这里插入图片描述

4、watch监视

通过watch命令来查看demo.MathGame#primeFactors函数的返回值:

q或者ctrl + c可以停止监视。

watch demo.MathGame primeFactors returnObj

在这里插入图片描述

5、退出arthas

如果只是退出当前的连接,可以使用quit或者exit命令,arthas到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出arthas,可以执行stop命令。

小结

在这里插入图片描述

五、基础命令

1、help

查看命令帮助信息

在这里插入图片描述

2、cat

打印文件内容,和linux中的cat命令类似

如果没有写路径,则显示当前目录下的文件

在这里插入图片描述

3、grep

匹配查找,和linux中的grep命令类似,但它只能用于管道命令。

在这里插入图片描述

只显示包含java字符串的行系统属性
sysprop | grep java

在这里插入图片描述

显示包含java字符串的行和行号的系统属性
sysprop | grep java -n

在这里插入图片描述

显示包含system字符串的10行信息
thread | grep system -m 10

在这里插入图片描述

使用正则表达式,显示包含2个o字符的线程信息
thread | grep -e "o+"

在这里插入图片描述

4、pwd

返回当前的工作目录

在这里插入图片描述

5、cls

清空当前屏幕区域

小结

在这里插入图片描述

6、session

查看当前会话的信息

在这里插入图片描述

7、reset

重置增强类,将被arthas增强过的类全部还原,arthas服务端关闭时会重置所有增强过的类。

还原指定类
reset Test
还原所有以List结尾的类
reset *List
还原所有的类
reset

在这里插入图片描述

8、version

输出当前目标Java进程所加载的Arthas版本号

9、history

打印历史命令

在这里插入图片描述

10、quit

退出当前arthas客户端,其它arthas客户端不受影响

11、stop

关闭arthas服务端,所有客户端全部退出

12、keymap

arthas快捷键列表以及自定义快捷键

在这里插入图片描述

13、arthas命令行快捷键

在这里插入图片描述

  • 任何时候的tab键,会根据当前的输入给出提示
  • 命令后敲 - 或 – ,然后按tab键,可以展示出此命令具体的选项

后台异步命令相关快捷键

  • ctrl + c 终止当前命令
  • ctrl + z 挂起当前命令,后续可以 bg/fg 重新支持此命令,或kill掉
  • ctrl + a 回到行首
  • ctrl + e 回到行尾

在这里插入图片描述

六、JVM相关命令

1、dashboard

显示当前系统的实时数据面板,按q或者ctrl + c退出

dashboard    Overview of target jvm's thread, memory, gc, vm, tomcat info.   

在这里插入图片描述

  • ID:Java级别的线程ID,注意这个ID不能跟jstack中的naviteID一一对应
  • NAME:线程名
  • GROUP:线程组名
  • PRIORITY:线程优先级,1-10之间的数字,越大表示优先级越高
  • STATE:线程的状态
  • CPU%:线程消耗的cpu占比,采样100ms,将所有的线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
  • TIME:线程的运行总时间,数据格式为 分:秒
  • INTERRUPTED:线程当前的中断位状态
  • DAEMON:是否是daemon线程

2、Thread

查看当前JVM的线程堆栈信息

在这里插入图片描述

在这里插入图片描述

查看处于等待状态的线程

thread --state WAITING

在这里插入图片描述

3、jvm、sysprop

查看当前JVM的信息

在这里插入图片描述

线程相关

  • COUNT:JVM当前活跃的线程数
  • DAEMON-COUNT:JVM当前活跃的守护线程
  • PEAK-COUNT:从JVM启动开始曾经活着的最大线程数
  • STARED-COUT:从JVM启动开始总共启动过的线程次数
  • DEADLOCK-COUNT:JVM当前死锁的线程数

文件描述符相关

  • MAX-FILE-DESCRIPTOR-COUNT:JVM进程最大可以打开的文件描述符
  • OPEN-FILE-DESCRIPTOR-COUNT;JVM当前打开的文件描述符

4、sysprop

查看和修改JVM的系统属性

# 查看所有属性 
sysporp
查看单个属性,支持通过tab补全
sysporp java.version
修改单个属性
sysporp user.country
user.country=US

sysporp user.country CN

在这里插入图片描述

5、sysenv

查看当前JVM的环境属性(system environment variables)

查看所有环境变量
sysenv
查看单个环境变量
sysenv USER

6、vmoption

查看、更新VM诊断相关的参数

查看所有的选项
vmoption
查看指定的选项
vmoption PrintGCDetails
更新指定的选项
vmoption PrintGCDetails true

7、getstatic

通过getstatic命令可以方便的查看类的静态属性

getstatic 类名 属性名
显示demo.MathGame类中的静态属性random
getstatic demo.MathGame random

8、ognl

执行ognl表达式,,这是从3.0.5版本新增的功能

在这里插入图片描述

调用静态函数
ognl '@java.lang.System@out.println("helloworld")'
获取静态类的静态字段
ognl '@demo.MathGame@random'
执行多行表达式,赋值给临时变量,返回一个list
ognl '#value1=@System@getProperty("java.home"),#value2=@System@getProperty("java.runtime.name"),{#value1,#value2}'

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Servlet小项目 | 基于纯Servlet手写一个单表的CRUD操作

使用纯粹的Servlet完成单表【对部门的】的增删改查操作。(B/S结构的) 目录 一:设计数据库表及原型 二:动态实现部门列表及详情页 三:实现部门删除功能 四:实现部门新增功能 五:实现部门修…

NJUPT算法分析与设计期末考试2021.11.24

NJUPT算法分析与设计期末考试2021.11.24判断简答1.算法是什么?算法的时间复杂度是什么?衡量的原则,标准,工具2.分支限界法扩展活节点的方式有哪两种,有什么差别?3.回溯法搜索子集树,排列树的算法…

PostgreSQL下载和安装教程

PostgreSQL下载和安装嘚吧嘚下载安装配置pgAdmin设置中文安装中遇到的问题The database cluster initialisation failed.问题描述解决方法嘚吧嘚 公司在用PostgreSQL数据库,和MySQL一样是免费试用的。虽然不知道公司出于什么考虑没有选择MySQL,而是选用…

【户外】东莞-银瓶山-常规路线-登山游记+攻略

不想看流水的请直接看最后攻略 此次路线:北上南下。累计行走约11.57km. 2022/11/20 周日 东莞最近YQ严重,不是拉去Jiankang驿站,就是居家GeLi,加上工作也郁闷,出去走走。 昨晚两点睡觉,在给各种设备补电量…

qq录屏快捷键是什么?qq录屏声音设置

我们日常生活中,有时会突然遇到需要用电脑录制屏幕的情况,这个时候我们可以通过按下qq录屏的快捷键进行录屏。有些小伙伴就有疑问了,电脑qq录屏快捷键是什么? qq录屏声音如何设置?别急,接下来小编给大家详细…

SpringMVC跳转

转发: 1:添加成功跳转到成功页面,给出提示,失败跳转到失败页面 ---- jsp 2:添加成功后,跳转到查询的controller中 -- 另外一个程序,添加完成之后,执行查询所有的操作&#xff0c…

Linux环境基础开发工具使用

Linux环境基础开发工具使用 文章目录Linux环境基础开发工具使用1.Linux软件包管理器 yum1.1 什么是软件包1.2 了解rzsz(文件传输工具)1.3 查看软件包1.4 安装与卸载软件指令1.5 更新yum源2.Linux开发工具介绍2.1 vi/vim开发工具介绍2.2 vi/vim的按键图解3.Linux编辑器---vim的使…

数字信号处理 | 实验二 MATLAB z换和z逆变换分析+求解差分方程+求解单位冲击响应+求解幅频相频特性曲线+求解零极点

1.实验目的 (1)掌握离散时间信号的z变换和z逆变换分析 (2)掌握MATLAB中利用filter函数求解差分方程; (3)掌握MATLAB中利用impz函数求解单位冲击响应h(n); (4)掌握MATLAB中利用freqz函数求解幅频特性曲线和相频特性曲线; (5)掌握MATLAB中利用zplane函…

Spring事务管理 | 数据库连接池流程原理分析

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 文章目录▌Spring事务管理环境搭建标准配置声明式事务总结▌SqlSessionFactoryXML 中构建 SqlSessionFactory获得 SqlSession 的实例代码实现▌作用域(Sco…

2022.11.20 学习周报

文章目录摘要论文阅读1.题目2.摘要3.网络结构3.1 网络示意图3.2 网络特点4.问题的提出5.正则化带有LSTM单元的RNNs5.1 LSTM单元5.2 具有 Dropout 的正则化6.实验6.1 语音建模6.2 语音识别6.3 机器翻译6.4 图像字幕生成7.结论深度学习Pytorch实现简单的RNN总结摘要 This week, …

总账科目 前台操作关事务代码及操作要点

目录 1、维护会计科目相关代码及要点 2、公司代码中的科目参数详解 1、维护会计科目相关代码及要点 事务代码:FSP0 在科目表中维护科目 操作例子:创建1001010100 现金-人民币 及40010001实收资本. 点保存后成功展示如下图 注意,后台必须的…

treeSelect树组件设置父节点禁用

前言: 项目开发中需求方提了这样一个需求:下拉框数据是树形结构,但父节点禁止点选,只能点击子节点。毫无疑问,选用的是 ant design vue 组件库的 treeSelect 组件。但该组件默认每一级节点都可以进行选择,…

Vagrant+VirtualBox快速搭建Linux环境

VagrantVirtualBox快速搭建Linux环境虚拟机Oracle VM VirtualBoxVMware虚拟机的选择Vagrant介绍Vagrant安装centos7虚拟机固定ip配置允许账号密码登录Xshell 连接Vagrant生成的虚拟机虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功…

通过docker部署grafana和mysql

1. 简介2. 网络设置 - 2.1 docker网络设置 - 2.2 防火墙设置3. MySQL - 3.1 启动MySQL - 3.2 配置mysql - 3.3 创建只读用户 - 3.4 创建数据库4. Grafana - 4.1 启动Grafana - 4.2 配置数据源 - 4.3 dashboard与panel5. 参考 1. 简介 grafana是一个数据可视化程序, 可通过浏览…

python gdal geopandas basemap cartopy安装

python彻底解决Basemap cartopy geopandas 安装问题 Basemap cartopy geopandas rasterio这几个库存在一定的依赖关系,由于环境的变化 很可能哪天不知道就报错了: 版本不一致,运行也可能报错,如GDAL3.0的主要变化在于对空间参考…

13. PyQt5实现多页面切换之QTabWidget

PyQt5实现多页面切换之QTabWidget QTabWidget 类直接继承自 QWidget。该类提供了一个选项卡栏(QTabBar)和一个相应的页面区域,用于显示与每个选项卡相对应的页面。 与 QStackedLayout 布局原理相同,只有当前页面(即可见页面)是可见的,所有其他…

Flutter 动态更改应用程序启动图标

Flutter 动态更改应用程序启动图标 前言 在这篇文章中,我们将讨论如何在运行时在我们的 flutter 应用程序中动态更改多个应用程序启动器图标。 依赖包 一个用于动态更改移动平台上应用程序图标 flutter 插件。 https://pub.dev/packages/flutter_dynamic_icon 正文 …

zk客户端连接关闭服务端,查看znode(重补早期的学习记录)

前言:之前早期学习记录没有发布成功,丢在草稿里了,今天看到重新补一下。用作学习记录 启动zookeeper ./zkServer.sh start 连接客户端 ./zkCli.sh 后面不需参数,直接回车 回车后,这里有个watcher事件,已连接上localhost端口是默认端口2181 查看有什么命令可用 help 查…

C++类与动态内存分配

11.10 类与动态内存分配 通常,最好是在程序运行时(而不是编译时)确定诸如使用多少内存等问题。对于在对象中存储姓名来说,通常的C方法是,在类构造函数中使用new运算符在程序运行时分配所需的内存。为此,通常的方法是使用string类…

轻松解决VS配置OpenCV环境

一、OpenCV配置 1.下载OpenCV 点击进入下载OpenCV的官网界面 这里以Windows为例,其他同理。(可直接下载最新) 2.提取OpenCV 在这里浅说一句,为了方便环境配置文件管理,可以把所有关于环境配置的文件夹都放到一个叫e…