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

本贴最后更新于 1613 天前,其中的信息可能已经时移俗易

目录:

一、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

2、运行

从上面下载的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

3、常用命令

https://alibaba.github.io/arthas/dashboard.html

image.png

4、退出

[arthas@18888]$ shutdown

四、Arthas 定位性能问题

1、全局监控

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

image.png

2、定位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

3、线程死锁

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

image.png

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

image.png

或者直接输入:

[arthas@20917]$ thread -b

image.png

回帖
请输入回帖内容 ...