目录:
一、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 使用场景
主要的场景如下:
- 是否需要一个全局视角来查看系统的运行状况?
- 系统CPU升高了,到底是哪里占用了CPU?
- 运行的多线程有死锁吗?有阻塞吗?
- 有什么方法可以监控到JVM的实时运行状态?
三、Arthas怎么使用
- 安装
可以在官方 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
- 运行
从上面下载的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
看到如下信息,就说明启动成功了
- 常用命令
https://alibaba.github.io/arthas/dashboard.html
- 退出
[arthas@18888]$ shutdown
四、Arthas 定位性能问题
- 全局监控
使用dashboard 可以实时显示线程,内存,GC,运行环境信息
- 定位Java代码导致占用CPU高的问题
在jmeter里面跑性能测试场景,在聚合报告里面,可以看到响应时间越来越高
查看系统资源使用情况,输入:top
可以看到cup占用已经99%以上了
在arthas里面输入如下命令,查看CPU使用率TOP N的线程
[arthas@18888]$ thread -n 5
备注:这里有一个问题,当用jmeter发起请求的时候,线程会启动很多,输入dashboard 或thread,不会查看到单个CPU占用很高,只能用这种thread -n N的方式,显示线程栈的执行情况
这些代码导致的性能问题:
- 线程死锁
可以从dashboard的输出中,看到有BLOCKED状态的线程
再输入如下命令:thread 线程id
或者直接输入:
[arthas@20917]$ thread -b
欢迎来到testingpai.com!
注册 关于