前言
我们在定位java 一些问题的时候,经常会用到很多jdk的命令例如垃圾回收回收jstat ,查看堆内存空间jmap ,查看线程jstack这些命令。Arthas 除了对上述命令能够更加方便获取当前运行环境的情况,还能一些更加强大的功能。
实践
首先我们需要准备一个运行当前已经在运行java 项目,如果实在没有java 项目可以用下面demo项目替代。是一个很简单的程序,它随机生成整数,再执行因式分解,把结果打印出来。如果生成的随机数是负数,则会打印提示信息。
wget https://arthas.aliyun.com/arthas-demo.jar;java -jar arthas-demo.jar
我们自己项目会有一下内存方面设置,更加贴近于实际,这里我这里就用自己写的一个web的小demo项目测试。
当我们启动好项目,通过下面命令下载arthas-boot,并通过java -jar arthas-boot.jar 启动就好了
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
arthas-boot是Arthas的启动程序,它启动后,会列出所有的Java进程,用户可以选择需要诊断的目标进程。
选择对应进程,例如第一个进程输入 1 ,再Enter/回车
Dashboard
bashboard
通过这个大屏幕我们可以主要关注的几个点是,
第一大行存在当前最cpu占用率最高的线程及及对应进程
如果我们发现这个线程有异常那么可以,其中一个方法可以(另外一个方法可以通过下面 thread 线程id)&