使用[阿里问题定位神器]Arthas入门

news/2024/10/17 19:35:07/

目录

注意

安装

在线安装

离线安装

目前我接触到的实用命令

dashboard

heapdump

thread

jad

stack

trace


注意

arthas本身有一定的性能消耗,所以生产环境小心使用

arthas本身有一定的性能消耗,所以生产环境小心使用

arthas本身有一定的性能消耗,所以生产环境小心使用

文档地址:arthas (aliyun.com)

安装

在线安装

有外网的情况下

// 下载arthas-boot.jar
curl -O https://arthas.aliyun.com/arthas-boot.jar
// 启动arthas-boot.jar
java -jar arthas-boot.jar

离线安装

需要注意的是,启动arthas-boot.jar后attach进程的时候,会从外网下载依赖。

以在linux服务器上离线安装为例。

  1. 在有网的机器上下载arthas-boot.jar然后启动让其自动下载依赖
  2. 我电脑中依赖下载到了C:\Users\Administrator\.arthas\lib。把lib目录下的依赖打包
  3. 把打包后的依赖arthas-boot.jar放入没有外网的服务器上。注意要把依赖放入~/.arthas/lib/

即可使用

目前我接触到的实用命令

dashboard

可以查看如下信息,还是很方便的。图片来自官网

这里巩固一下nonheap:非堆就是JVM留给自己用的,所有方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

heapdump

类似 jmap 命令的 heap dump 功能

dump 到指定文件:heapdump /tmp/dump.hprof

thread

展示当前最忙的前 N 个线程并打印堆栈:(以前三个为例子)thread -n 3

显示指定线程的运行堆栈:thread id

显示一页线程信息(增量时间降序排列):thread

jad

反编译某个类(只显示源代码):(以String为例)jad --source-only java.lang.String

反编译某个方法:(以String的charAt为例)jad --source-only java.lang.String charAt

stack

输出当前方法被调用的调用路径

以官方例子为案例:stack demo.MathGame primeFactors

trace

方法内部调用路径,并输出方法路径上的每个节点上耗时。个人很喜欢,可以查哪里耗时比较多!作用在方法上

限定trace次数:(以1次为例)trace 全类名 方法名 -n -1 

trace 结果时间不准确问题,比如0.705196 > (0.152743 + 0.145825)

$ trace demo.MathGame run -n 1
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 66 ms, listenerId: 1
`---ts=2021-02-08 11:27:36;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1`---[0.705196ms] demo.MathGame:run()+---[0.152743ms] demo.MathGame:primeFactors() #24`---[0.145825ms] demo.MathGame:print() #25

 这个时候可能会有没有被 trace 到的函数。比如java.* 下的函数调用默认会忽略掉。通过增加     --skipJDKMethod false参数可以打印出来。

$ trace demo.MathGame run --skipJDKMethod false
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 35 ms, listenerId: 2
`---ts=2021-02-08 11:27:48;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@232204a1`---[0.810591ms] demo.MathGame:run()+---[0.034568ms] java.util.Random:nextInt() #23+---[0.119367ms] demo.MathGame:primeFactors() #24 [throws Exception]+---[0.017407ms] java.lang.StringBuilder:<init>() #28+---[0.127922ms] java.lang.String:format() #57+---[min=0.01419ms,max=0.020221ms,total=0.034411ms,count=2] java.lang.StringBuilder:append() #57+---[0.021911ms] java.lang.Exception:getMessage() #57+---[0.015643ms] java.lang.StringBuilder:toString() #57`---[0.086622ms] java.io.PrintStream:println() #57

watch

能方便的观察到指定函数的调用情况。能观察到的范围为:返回值抛出异常入参。

watch 命令定义了 4 个观察事件点,即 -b 函数调用前,-e 函数异常后,-s 函数返回后,-f 函数结束后。

观察表达式,默认值是{params, target, returnObj}

代表入参、this 对象和返回值

查看第一个入参:watch 全类名 方法名 "{params[0]}" -x 2

注意:-x 表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是 1,最大是4。

 有机会,发一个实战演练。下次一定🤔🤡🤔


http://www.ppmy.cn/news/798.html

相关文章

HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

Perl时间处理函数用法介绍

一. Perl时间的表示函数 1. 表示日期的方式多种多样: "18Jan1973"; "18/01/1973"; "01/18/1973"; "Jan181973"; "18-01-73"; "18-01-1973"; "01/73". 其中一些格式意思不清(如"01-06-1973",…

SNMP信息收集与利用

SNMP信息收集与利用 任务环境说明: 服务器场景操作系统:Back Track five(用户名:root;密码:toor) 服务器场景操作系统:Microsoft Windows2003 Server(用户名:administrator;密码:123456) 第一步,打开网络拓扑,点击启动选项,启动实验虚拟机

LeetCode-1769. 移动所有球到每个盒子所需的最小操作数【数组,前缀和】

LeetCode-1769. 移动所有球到每个盒子所需的最小操作数【数组&#xff0c;前缀和】题目描述&#xff1a;解题思路一&#xff1a;简单暴力&#xff0c;对每个位置单独计算。解题思路二&#xff1a;根据前一个盒子的操作数得到下一个盒子的操作数,先初始化第0个位置的操作数和rig…

运放参数-共模输入范围-运算放大器

运放共模输入范围 根据实际的应用我们会选择一个运算放大器&#xff08;op amp&#xff09;&#xff0c;选型过程中工程师会考虑一些参数可例如&#xff1a;电源电压、增益带宽积、输入共模范围、转换速率和输入噪声电压等等。 在本篇文章中重点介绍了运放的输入共模范围的定…

使用 Qt for Android 获取并利用手机传感器数据(1)开发环境省心搭建

现代手机拥有许多传感器&#xff0c;包括地磁、姿态、GPS、光照、温度、气压、摄像、声音、电磁等&#xff0c;完全就是一个高度集成的科学仪器。不夸张的说&#xff0c;一部手机加上一个外围的计算机和控制系统&#xff0c;做一个功能较强的自主移动机器人并不是不可能。但是&…

keil5打开keil4工程无法编译的情况解决办法!!!!!!

目录 1.情况 1.keil5使用&#xff08;打开&#xff09;keil4文件工程的时候报错 2.解决办法 如果是kei5打开kei4工程文件出现 步骤1&#xff1a; 步骤2&#xff1a; 步骤3&#xff1a; 1.情况 1.keil5使用&#xff08;打开&#xff09;keil4文件工程的时候报错 --- Erro…

Spring MVC中的拦截器

在之前学习JAVAWEB 的时候&#xff0c;我们学习了过滤器的知识。过滤器的作用是保护请求的服务器资源&#xff0c;在请求资源被执行之前&#xff0c;如果请求地址符合拦截范围&#xff0c;则会先执行过滤器。过滤器的执行时机&#xff0c;是在Servlet之前执行的。但是在使用了S…