集成arthas实现java诊断

Java
2025-08-16 08:35:33
分享

概述

 现状

由于目前无法直接监控到相关java服务的CPU占用的明细情况,导致无法直接分析问题(间接分析问题也是可以分析出来,但是效率偏低),因此通过在容器内集成arthas 诊断组件实现快速定位问题。

 1       Arthas诊断工具

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

 

官方网站:https://arthas.gitee.io/

 

官方网站提供了详细的使用说明,本章就不在赘述。

1       Arthas特性


 

 

1       Arthas不适用的场景

      当服务器已经内存100%卡死状态,无法调用arthas控制台;

      当内存已经出现OOM,arthas无法跟中挂点的JVM进程;

      某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了;

2      诊断方案

 

2       诊断通道

2.1   在ECS内启动监控

cd /root && java -jar arthas-boot.jar

 

2.1   在kubectl控制pod启动监控

当登录到k8s节点服务器的时候,可以控制pod

kubectl exec -it $(kubectl get pod -n pz-dev | grep activity | awk '{print $1; exit}') -n pz-dev -- /bin/sh    #activity为例
cd /app && java -jar arthas-boot.jar

2.1   在容器内启动监控

cd /app && java -jar arthas-boot.jar

# 启动后选择对应的java进程

2       Arthas诊断使用

arthas的使用将列举常用的排查问题命令,用于快速分析CPU占用线程代码行数。

2.2   启动监控

/app $ java -jar arthas-boot.jar
[INFO] JAVA_HOME: /usr/lib/jvm/java-1.8-openjdk/jre
[INFO] arthas-boot version: 3.7.2
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hitENTER.
* [1]: 7 /app/app.jar
  [2]: 141 arthas-boot.jar
1
[INFO] arthas home: /home/user/.arthas/lib/3.7.2/arthas
[INFO] The target process already listen port 3658, skip attach.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'

wiki       https://arthas.aliyun.com/doc
tutorials  https://arthas.aliyun.com/doc/arthas-tutorials.html
version    3.7.2
main_class
pid        7
time       2024-04-01 18:20:45

 

2.2   退出arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出 arthas,可以执行stop命令。

[arthas@7]$ exit

2.2   dashboard命令

[arthas@7]$ dashboard

默认5秒刷新一次,整个JVM内部的信息尽收眼底


2.2   查看线程排行

thread -n 5

 

2.2   堆内存导出文件

heapdump arthas-output/dump.hprof


3      最佳实践

 

3       最佳实践


The End
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表本站观点和立场。