性能分析--JVM--Arthas入门

1 概述
针对性能问题,判断和分析起来是极其复杂的,那么有什么简单易用的方法来确定问题原因呢?在此,我们介绍一个武器-Arthas,通过这个工具的几个命令的使用来讲解如何分析性能问题。
Arthas是Alibaba开源的Java诊断工具,可以用于在线排查问题,动态跟踪Java代码,实时监控JVM状态,这些特性正是分析苍穹性能问题需要的。
首先,实际生产环境中,容器众多,要确定具体哪个容器有问题,还是有点难度的,我们建议通过金蝶云GPaaS平台的容器监控或者kubectl命令来请确定高负载的容器,然后再进入对应容器使用Arthas进行详细跟踪。
2 安装工具
在官方文档中,一般使用java -jar arthas-boot.jar这个jar来下载完整程序包后启动Arthas的,但是由于客户网络环境差异很大,不是所有的环境都能访问公网的,因此,我们提供一个离线的版本v3.4.4,可以直接放到容器中,解压后启动。
下载地址(复制链接和提取码到百度云):
链接:Arthas
提取码:7dzu
这个压缩包的shell,小编做了修改,取消了一些命令工具的检查,苍穹标准容器可以正常运行。但是,telnet工具Arthas强依赖的,是容器中必须存在的。
2.1 上传tar包
如果使用金蝶云GPaaS平台,请参考下面的方法。如果使用其他容器平台,使用#docker cp命令将tar文件拷贝到容器内;如果使用非容器部署,则忽略这一步骤。

2.2 解压tar包
使用命令#tar xvf arthas.tar.gz进行解压。

2.3 启用Arthas
进入解压后的目录,使用#./as.sh 1附加到苍穹进程。

3 CPU瓶颈
常见的性能问题,大多都可以通过首先检查CPU得以确诊或者确认,GC线程或者VM Thread高负载提示内存回收问题,说明内存使用存在瓶颈;业务线程高负载提示业务逻辑存在缺陷。那么第一斧子就是监控CPU使用率。
如果苍穹进程不能挂载Arthas,或者处于CPU严重超载时,我们建议通过如下shell来获取最耗时的线程:
# top -b -d2 -n3 -H -p 1 | grep 'top -' -A 17 > slow.log && /jdk/bin/jstack -l 1 >> slow.log
间隔2秒,获取3次进程1的前10个最耗费CPU的线程信息,并与线程堆栈一起输出到文件slow.log中,然后通过线程号找到最耗费CPU的线程。
但是,大多数场合中,Arthas还是能够后正确地附加到苍穹进程的,在Arthas启动后,使用命令$thread –n 2 –I 5000就可以监控在5秒内,最耗费CPU的两个线程并打印堆栈。

上图中,cpuUsage就是5秒内最消耗CPU的线程及其堆栈,通过这个方法就可以轻松方便地定位出有问题的线程。如果CPU使用率高的线程是Service Thread、Finalizer、VM Thread、JIT编译、GC等系统线程,则需要从系统本身或者内存等方面继续跟踪;如果线程是
DubboServerHandler、http-request-pool、scheduleTask-BIZJOB以及RabbitMqAsyncConsumer这一类业务线程,需要重点关注对应业务代码的类和方法。
4 监控方法
如果说第一斧子是找到了最耗时的线程堆栈中的类和方法,那么第二斧就是跟踪业务代码的执行频率和耗时了。
当我们确定对应的疑似有性能问题的方法时,我们可以继续跟踪器执行频率和响应时间,使用命令$ mo
性能分析--JVM--Arthas入门
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



