最新原文:https://www.cnblogs.com/uncleyong/p/14944401.html

Arthas是Alibaba开源的Java诊断工具,功能很强大,它是通过Agent方式来连接运行的Java进程、主要通过交互式来完成功能。

下面总结下工作中经常用到的功能。

运行

在执行java -jar arthas-boot.jar前,务必先保证有java进程在运行

选择要粘附的进程,输入编号即可,下面输入3

也可以通过浏览器连接arthas,只是执行命令的时候需要加--target-ip参数

dashboard

查看线程,内存,GC等信息

thread

显示粘附的这个进程所有线程信息,和dashboard里面展示的线程一样

thread -n 3,最繁忙的3个线程(占用cpu最多的前3个),输出栈信息

thread n,查看某个指定的线程,输出栈信息

thread -b,输出阻塞的线程栈信息,如果响应慢,阻塞状态的线程比较多,我们需要重点关注;关于线程的状态如何分析,后续再分享。

thread |grep BLOCKED,找出阻塞状态的线程,下面看到有2个

上面等价于thread --state BLOCKED

---------------------分割线,说明:下面是服务重启了,所以进程号和上面不一样---------------------------

jvm

重点关注下死锁(DEADLOCK-COUNT,下面不为0,表示有死锁),jvm相关的,用其它的监控方式

根据下面的栈信息,可以看到,这两个线程互相请求被对方占用未释放的资源导致了死锁

jad

如果没有代码权限,可以使用反编译功能,反编译指定的类或者方法

jad com.qzcsbj.controller.UserController mem,反编译指定方法,除了展示代码,还展示了类加载器的信息

jad com.qzcsbj.controller.UserController,反编译指定的类,除了展示代码,还展示了类加载器的信息

jad --source-only com.qzcsbj.controller.UserController,不显示类加载器信息,只显示代码

sc

Search Class,查看类信息(推荐jad)

sc com.qzcsbj.*,可以模糊的方式

sc -d com.qzcsbj.controller.UserController,根据上图结果,我们来查看类的详细信息

下面可以看到类的路径、修饰符、注解、父类、类加载器

sc -df com.qzcsbj.controller.UserController,查看类的filed,可以看到其名称、类型、修饰符

sm

Search Method,查看方法(推荐jad)

sm -d com.qzcsbj.controller.UserController mem,显示方法的详情:修饰符、注解、参数、返回类型

monitor以及tt

监控方法的执行情况

monitor com.qzcsbj.controller.UserController m -c 2,重点看成功次数、平均响应时间、失败率

和tt类似,下面关注:耗时、IS-RET为false表示失败

watch

类似debug,查看被测方法的参数和返回值

watch com.qzcsbj.controller.UserController login '{params, returnObj}' -x 2,其中-x表示深度

入参是qzcsbj/123456,返回是msg/code

trace

跟踪方法内部调用,输出各个节点的耗时,主要用于响应慢的时候

trace com.qzcsbj.controller.UserController m,找到耗时多的方法(下面标红的),然后我们就可以分析代码,看在执行什么操作了

trace com.qzcsbj.controller.UserController m -n 2,一般需要输出多次结果,所以这里可以通过-n指定结果数量

trace com.qzcsbj.controller.UserController m '#cost>1000',如果输出结果次数比较多,我们还可以对耗时进行过滤

profiler(火焰图)

系统cpu高的时候,我们可以看系统调用,相比于perf命令,profiler的步骤要更简便点,

profiler start,启动,默认是生成cpu的火焰图,which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu

profiler stop,停止,可以看到生成的svg文件路径

浏览器访问

关于如何看火焰图,我们看顶层最宽的。

补充

在做性能测试的时候,针对java应用,单纯靠arthas还是不够的,下面这些知识也需要掌握。

最新原文:https://www.cnblogs.com/uncleyong/p/14944401.html

https://mp.weixin.qq.com/s/YUFAAyhCPgSb5WrJm_LWFA

Java诊断神器:Arthas常用功能的更多相关文章

  1. java 诊断工具——Arthas

    该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql! 接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 ja ...

  2. Java诊断利器Arthas

    1 简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...

  3. Java 诊断工具 Arthas 教程学习笔记

    Java 诊断利器 Arthas,是阿里的一款开源工具.Github-alibaba/arthas 上可以看到它的介绍.了解它,主要是最近对分析 Java 错误堆栈比较感兴趣,机缘巧合看到了它. 本文 ...

  4. Alibaba Java诊断工具Arthas之快速安装和简单使用

    Alibaba Java诊断工具Arthas简单介绍 : 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception ...

  5. Java诊断工具Arthas

    Java诊断工具Arthas 1. Arthas简介 Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类.昨天试用了一下,发现真是强大,解决了我工作两年的很多 ...

  6. 【Java】15分钟快速体验阿里Java诊断工具Arthas

    [墙裂推荐]15分钟快速体验阿里Java诊断工具Arthas : https://alibaba.github.io/arthas/arthas-tutorials?language=cn&i ...

  7. Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas

    Arthas 用户文档 — Arthas 3.1.0 文档https://alibaba.github.io/arthas/ alibaba/arthas: Alibaba Java Diagnost ...

  8. JAVA基础语法:常用功能符以及循环结构和分支结构(转载)

    3.JAVA基础语法:常用功能符以及循环结构和分支结构 1.常用功能符 注释 ("文字"是被注释的部分) //文字 单行注释 /文字/ 多行注释 算术运算符 + - * / / 整 ...

  9. 阿里JAVA诊断工具Arthas的初步使用

    Arthas 是Alibaba开源的Java诊断工具,主要解决以下问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 comm ...

随机推荐

  1. 为什么char类型输入遇空格会结束,int类型必须要空格才能输出

    char类型与int类型输入时的区别: 在C语言的规则中,规定了scanf函数在接收字符串时--遇到空格或回车就认为前面的输入已经完成且有效! 而对于int类型:表示整数,输入时需要用空格隔开,以确认 ...

  2. GIL全局解释器锁、死锁现象、python多线程的用处、进程池与线程池理论

    昨日内容回顾 僵尸进程与孤儿进程 # 僵尸进程: 所有的进程在运行结束之后并不会立刻销毁(父进程需要获取该进程的资源) # 孤儿进程: 子进程正常运行 但是产生该子进程的父进程意外死亡 # 守护进程: ...

  3. 【vps】如何在vps上安装mirai机器人?

    [vps]如何在vps上安装mirai机器人? 前言 由于某位师傅在群里设置了一个bot,吸引了我,所以我之前找他问了点bot的相关知识,这几天正好服务器搬迁,所以就在新服务器上再装一遍bot 1.安 ...

  4. STC8H开发(五): SPI驱动nRF24L01无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  5. 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)

    公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...

  6. (3)ESP32 Python 制作一个办公室温度计

    因为经常在办公室里面不知道实际室内温度是多少,所以用ESP32做了一个工具来进行温度&湿度的监测.在之前的文章当中,已经完成了ESP32的数据上云工作,如果要进行温度/湿度的检测.从原理上就是 ...

  7. thrift基础知识

    1. 架构图 Thrift 包含一个完整的堆栈结构用于构建客户端和服务器端.下图描绘了 Thrift 的整体架构. 图 1. 架构图 如图所示,图中黄色部分是用户实现的业务逻辑,褐色部分是根据 Thr ...

  8. STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  9. coredns 安装

    coredns简介 CoreDNS是一个DNS服务器,和Caddy Server具有相同的模型:它链接插件.CoreDNS是云本土计算基金会启动阶段项目.CoreDNS是SkyDNS的继任者. Sky ...

  10. Spring系列7:`autowire`自动装配怎么玩

    回顾 前几篇我们介绍各种依赖依赖注入,都是显式指定的,配置明确但同时也有些繁杂和重复."很多发明的出发点,都是为了偷懒,懒人是推动社会进步的原动力".Spring 提供了自动注入依 ...