Arthas 是阿里巴巴开源的一款监控java进程的工具,可以有效监控CPU、内存使用情况,更厉害的是可以帮助开发人员深入排查java代码的问题,比如java进程占用cpu过高是哪一个线程执行哪一个类的哪一个方法出的问题

首先,先给大家普及一下Arthas的使用步骤:

Step1 下载安装:

在线安装方式: curl -O https://alibaba.github.io/arthas/arthas-boot.jar

离线方式:到github下载对应的已发布的稳定的jar包 https://github.com/alibaba/arthas/tree/arthas-all-3.1.7

Step2 启动:

java -jar arthas-boot.jar

启动成功后如下图所示:

arthas能查看到docker的java进程吗 arthas排查内存高问题_jar


上图界面可以看到检测到了16个java进程,其中一个不可用;默认当前会话选中的是第一个进程:3968如果需要切换到其他进程怎么办呢?

直接输入对应的进程编号即可,如下图所示:

arthas能查看到docker的java进程吗 arthas排查内存高问题_java_02


从图中效果可以发现,虽然已经Attach捕获进程成功,但是当前进程还是之前的会话进程3968,这是Arthas的一个坑

很简单解决此问题,如下图所示步骤:

先关闭当前会话,然后再重启arthas,

arthas能查看到docker的java进程吗 arthas排查内存高问题_jar_03


arthas能查看到docker的java进程吗 arthas排查内存高问题_java_04


如此以上两个步骤即可解决这个坑人的问题~~下面是简单列举下常用的命令:

命令:dashboard 当前系统的实时数据状态看板,线程的cpu占用情况,内存的消耗和垃圾回收情况等

arthas能查看到docker的java进程吗 arthas排查内存高问题_java_05


命令:sc 查看JVM已加载的类信息

arthas能查看到docker的java进程吗 arthas排查内存高问题_java_06

命令:sm 查看已加载类的方法信息

arthas能查看到docker的java进程吗 arthas排查内存高问题_java_07


命令:trace 定位方法内部代码块性能耗时情况

arthas能查看到docker的java进程吗 arthas排查内存高问题_java_08

命令:thread 显示所有线程的信息

arthas能查看到docker的java进程吗 arthas排查内存高问题_java_09


thread -n 3 展示当前最忙的前N个线程并打印堆栈

arthas能查看到docker的java进程吗 arthas排查内存高问题_jar_10

就此为止,想查看更多的命令解释,请参见官方文档
https://alibaba.github.io/arthas/commands.html