Arthas - 定位 Java 性能问题原来这么简单

本贴最后更新于 669 天前,其中的信息可能已经水流花落

目录:

一、Arthas 介绍

二、Arthas 使用场景

三、Arthas怎么使用

四、Arthas 定位性能问题

    定位Java代码导致占用CPU高的问题
  
  线程死锁

前言:

在做性能测试的过程中,当遇到Java性能问题,比如CPU飙升,负载突高,内存溢出等问题,需要一个个命令输入,比如jstack,jmap,top。最终才能一步步定位到问题,有时还不能定位到问题,而通过arthas可以很快的定位到问题
一、Arthas 介绍

Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。

Arthas 官方文档十分详细,本文也参考了官方文档内容,同时在开源在的 Github 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。

开源地址:https://github.com/alibaba/arthas

官方文档:https://alibaba.github.io/arthas

二、Arthas 使用场景

主要的场景如下:

  1. 是否需要一个全局视角来查看系统的运行状况?
  2. 系统CPU升高了,到底是哪里占用了CPU?
  3. 运行的多线程有死锁吗?有阻塞吗?
  4. 有什么方法可以监控到JVM的实时运行状态?

三、Arthas怎么使用

  1. 安装

可以在官方 Github 上进行下载,也可以在国内的码云 Gitee 下载。

github下载

wget https://alibaba.github.io/arthas/arthas-boot.jar

或者 Gitee 下载

wget https://arthas.gitee.io/arthas-boot.jar

打印帮助信息

java -jar arthas-boot.jar -h

  1. 运行

从上面下载的jar包来看,可以直接用java -jar命令运行

运行方式有如下两种:

方式1:先运行,再选择java进程pid

[root@localhost data]# java -jar arthas-boot.jar

[INFO] arthas-boot version: 3.3.3

[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.

输入[]里面的数字,回车

image.png

另外一种方式,运行时选择java进程pid:

备注:查看运行的java进程信息

image.png

[root@localhost ~]# java -jar arthas-boot.jar 18095

看到如下信息,就说明启动成功了

image.png

  1. 常用命令

dashboard — Arthas 3.6.2 文档

image.png

  1. 退出

[arthas@18888]$ shutdown

四、Arthas 定位性能问题

  1. 全局监控

使用dashboard 可以实时显示线程,内存,GC,运行环境信息

image.png

  1. 定位Java代码导致占用CPU高的问题

在jmeter里面跑性能测试场景,在聚合报告里面,可以看到响应时间越来越高

查看系统资源使用情况,输入:top

image.png

可以看到cup占用已经99%以上了

在arthas里面输入如下命令,查看CPU使用率TOP N的线程

[arthas@18888]$ thread -n 5

image.png

备注:这里有一个问题,当用jmeter发起请求的时候,线程会启动很多,输入dashboard 或thread,不会查看到单个CPU占用很高,只能用这种thread -n N的方式,显示线程栈的执行情况

这些代码导致的性能问题:

image.png

  1. 线程死锁

可以从dashboard的输出中,看到有BLOCKED状态的线程

image.png

再输入如下命令:thread 线程id

image.png

或者直接输入:

[arthas@20917]$ thread -b

image.png

1 操作
mike.liu 在 2020-08-27 23:14:19 更新了该帖
1 回帖
请输入回帖内容 ...
  • panpku
    该回帖仅作者和楼主可见