1。1Arthas是什么 arthas是阿里巴巴开源的Java诊断工具,基本使用场景是定位复现一些生产环境比较难以定位问题。可以在线排查问题,以及动态追踪Java代码,实时监控JVM状态等等,官网地址:https:arthas。aliyun。comdoc。1。2Arthas能干什么 某个类从那个jar包加载的?为什么会报各种类的异常?(可以通过命令拿到指定类的加载路径和异常信息) 改的代码没有执行到?是没有commit还是分支搞错还是怎么样?(可以通过反编译拿到类的代码信息) 遇到问题无法在线上debug,难道只能通过加日志再重新发布吗?(可以通过jdk1。5的instrument来进行代码的动态替换) 线上遇到某个用户的数据处理有问题,但线上同样无法debug,线下无法重现!(arthas中可以看到很详细的jvm状态以及一些比较方便的工具,比如反编译,在线调试等) 是否有一个全局视角来查看系统的运行状况?(dashboard命令查看jvm的详细信息) 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例?2。1下载从GithubReleases页下载或者maven仓库下载 https:github。comalibabaarthasreleaseswgethttps:arthas。aliyun。comarthasdemo。jarjavajararthasdemo。jar用as。sh启动 解压后,在文件夹里有as。sh,直接用。as。sh的方式启动:。as。sh 打印帮助信息:。as。shh用arthasboot启动 或者在解压后,在文件夹里有arthasboot。jar,直接用javajar的方式启动:javajararthasboot。jar 打印帮助信息:javajararthasboot。jarh3。1离线安装 安装过程: 1、下载arthas全量包、安装 https:github。comalibabaarthasreleasesdownloadarthasall3。6。4arthasbin。zip 如果下载到本地的文件服务器,可以直接下载、解压(容器控制台中,也可以直接下载使用)wgethttp:172。20。56。117jdkarthas3。6。4arthasbin。zipunziparthasbin。zip(unzipdarthasarthasbin。zip) 解压后,运行如下命令进行安装〔rootnccztsjbnode19〕。installlocal。shinstalltolocalsucceeded。 OK,到此arthas工具安装完成。4、运行arthas Javajararthasboot。jar 如果有报错,这个错是用户要选择进程的用户 当在本地启动时,可以访问http:127。0。0。1:8563,通过浏览器来使用Arthas。 输入help可以看到常用的帮助命令: arthasboot。jar支持很多参数,可以执行javajararthasboot。jarh查看dashboarddashboard命令可以查看系统的实时数据面板。q或ctrlc可以退出数据面展示。 数据说明:ID:Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应NAME:线程名GROUP:线程组名PRIORITY:线程优先级,110之间的数字,越大表示优先级越高STATE:线程的状态CPU:线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。TIME:线程运行总时间,数据格式为分:秒INTERRUPTED:线程当前的中断位状态DAEMON:是否是daemon线程thread thread1打印线程ID1的栈 Arthas支持管道命令,可以利用thread1grepmain(查找mainclass 查看CPU使用率topn的线程的栈,当前最忙的前n个线程:Copythreadn3 查看5秒内的CPU使用率topn的线程栈:Copythreadn3i5000 i指定CPU占比统计的采样间隔,单位为毫秒 查看线程是否有阻塞:Copythreadb 有时候我们发现应用卡住了,通常是由于某个线程拿住了某个锁,并且其他线程都在等待这把锁造成的。为了排查这类问题,此时使用b参数,找到罪魁祸首。 注意,目前只支持找出synchronized关键字阻塞住的线程,如果是java。util。concurrent。Lock,目前还不支持 下一节后面详细介绍这个arthas的命令