目录:
一、Arthas 介绍
二、Arthas 使用场景
三、Arthas怎么使用
四、Arthas 定位性能问题
定位Java代码导致占用CPU高的问题
线程死锁
前言:
在做性能测试的过程中,当遇到Java性能问题,比如CPU飙升,负载突高,内存溢出等问题,需要一个个命令输入,比如jstack,jmap,top。最终才能一步步定位到问题,有时还不能定位到问题,而通过arthas可以很快的定位到问题
一、Arthas 介绍
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。
Arthas 官方文档十分详细,本文也参考了官方文档内容,同时在开源在的 GitHub 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。
二、Arthas 使用场景
主要的场景如下:
1、是否需要一个全局视角来查看系统的运行状况?
2、系统 CPU 升高了,到底是哪里占用了 CPU?
3、运行的多线程有死锁吗?有阻塞吗?
4、有什么方法可以监控到 JVM 的实时运行状态?
三、Arthas 怎么使用
1、安装
可以在官方 GitHub 上进行下载,也可以在国内的码云 Gitee 下载。
GitHub 下载
或者 Gitee 下载
打印帮助信息
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.
[1]: 15585 arthas-boot.jar
[2]: 18095 org.apache.catalina.startup.Bootstrap
输入[]里面的数字,回车
另外一种方式,运行时选择 Java 进程 pid:
备注:查看运行的 Java 进程信息
[root@localhost ~]# Java -jar arthas-boot.jar 18095
看到如下信息,就说明启动成功了
3、常用命令
4、退出
[arthas@18888]$ shutdown
四、Arthas 定位性能问题
1、全局监控
使用 dashboard 可以实时显示线程,内存,GC,运行环境信息
2、定位 Java 代码导致占用 CPU 高的问题
在 jmeter 里面跑性能测试场景,在聚合报告里面,可以看到响应时间越来越高
查看系统资源使用情况,输入:top
可以看到 cup 占用已经 99% 以上了
在 arthas 里面输入如下命令,查看 CPU 使用率 TOP N 的线程
[arthas@18888]$ thread -n 5
备注:这里有一个问题,当用 jmeter 发起请求的时候,线程会启动很多,输入 dashboard 或 thread,不会查看到单个 CPU 占用很高,只能用这种 thread -n N 的方式,显示线程栈的执行情况
这些代码导致的性能问题:
3、线程死锁
可以从 dashboard 的输出中,看到有 BLOCKED 状态的线程
再输入如下命令:thread 线程 id
或者直接输入:
[arthas@20917]$ thread -b