JVM之Arthas排查问题

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html

有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。

最后再送一句:最好是学会了,而不是学废了!!

2

Arthas 是阿里开源的 Java 诊断工具,能够帮助开发者快速定位和解决 Java 应用的性能问题、内存泄漏、CPU 飙升等问题。以下是使用 Arthas 排查常见问题的详细步骤。


1. 安装与启动 Arthas

安装

  • 下载 Arthas:

    curl -O https://arthas.aliyun.com/arthas-boot.jar
    

启动

  • 启动 Arthas:

    java -jar arthas-boot.jar
    
  • 选择需要诊断的 Java 进程(输入进程编号)。


2. 常用命令

dashboard

  • 查看实时系统状态,包括 CPU、内存、线程等信息。

    dashboard
    
    • CPU:查看占用 CPU 高的线程。

    • Memory:查看堆内存使用情况。

    • Threads:查看活跃线程。


thread

  • 查看线程信息,定位高 CPU 线程。

    thread
    
    • 查看所有线程:

      thread
      
    • 查看 CPU 占用最高的线程:

      thread -n 3
      
    • 查看某个线程的堆栈:

      thread <线程ID>
      
    • 查找阻塞的线程:

      thread -b
      

jvm

  • 查看 JVM 信息,包括内存、GC、类加载等。

    jvm
    

heapdump

  • 导出堆内存快照,用于分析内存泄漏或 OOM。

    heapdump /path/to/heapdump.hprof
    
    • 使用 MATJVisualVM 分析 heapdump.hprof 文件。

sc 和 sm

  • sc:查看已加载的类信息。

    sc com.example.MyClass
    
  • sm:查看类的方法信息。

    sm com.example.MyClass
    

watch

  • 监控方法的入参、返回值、异常等信息。

    watch com.example.MyClass myMethod "{params, returnObj, throwExp}" -n 5
    
    • params:方法参数。

    • returnObj:返回值。

    • throwExp:异常信息。

    • -n 5:监控 5 次调用。


trace

  • 追踪方法调用链路,分析性能瓶颈。

    trace com.example.MyClass myMethod
    

monitor

  • 监控方法的调用统计(调用次数、成功率、平均耗时等)。

    monitor -c 5 com.example.MyClass myMethod
    
    • -c 5:每 5 秒统计一次。

ognl

  • 执行 OGNL 表达式,查看或修改运行时的变量

    ognl '@com.example.MyClass@myStaticField'
    

3. 排查常见问题

CPU 飙升

  1. 使用 dashboard 查看 CPU 占用高的线程。

  2. 使用 thread -n 3 查看 CPU 占用最高的 3 个线程。

  3. 使用 thread <线程ID> 查看线程堆栈,定位问题代码。

  4. 使用 tracewatch 进一步分析问题方法。


内存泄漏

  1. 使用 dashboard 查看内存使用情况。

  2. 使用 heapdump 导出堆内存快照。

  3. 使用 MATJVisualVM 分析 heapdump.hprof,查找内存泄漏的根源。

  4. 使用 scsm 查看相关类的加载和方法调用情况。


方法性能问题

  1. 使用 trace 追踪方法调用链路,分析耗时操作。

  2. 使用 monitor 监控方法的调用统计,查看平均耗时和调用次数。

  3. 使用 watch 监控方法的入参和返回值,定位问题。


死锁

  1. 使用 thread -b 查找死锁线程。

  2. 使用 thread <线程ID> 查看线程堆栈,分析锁竞争情况。


4. 示例场景

场景 1:CPU 飙升

  1. 启动 Arthas:

    java -jar arthas-boot.jar
    
  2. 使用 dashboard 查看 CPU 占用高的线程。

  3. 使用 thread -n 3 找到占用 CPU 最高的线程。

  4. 使用 thread <线程ID> 查看堆栈,定位问题代码。

场景 2:内存泄漏

  1. 启动 Arthas:

    java -jar arthas-boot.jar
    
  2. 使用 heapdump 导出堆内存快照:

    heapdump /tmp/heapdump.hprof
    
  3. 使用 MAT 分析 heapdump.hprof,找到内存泄漏的对象。

场景 3:方法性能问题

  1. 启动 Arthas:

    java -jar arthas-boot.jar
    
  2. 使用 trace 追踪方法调用链路:

    trace com.example.MyClass myMethod
    
  3. 使用 monitor 监控方法调用统计:

    monitor -c 5 com.example.MyClass myMethod
    

5. 总结

Arthas 是一款功能强大的 Java 诊断工具,能够帮助开发者快速定位和解决以下问题:

  • CPU 飙升:dashboard -> thread -> trace

  • 内存泄漏:heapdump -> MAT 分析。

  • 方法性能问题:trace -> monitor -> watch

通过熟练掌握 Arthas 的使用,可以显著提升排查问题的效率。

3

相关推荐
Rverdoser16 分钟前
conda创建Python虚拟环境的原理
开发语言·python·conda
我没想到原来他们都是一堆坏人25 分钟前
idea中lombok插件的安装与使用
java·开发语言
失业写写八股文1 小时前
Java类验证阶段深度解析:四层安全关卡详解
java·jvm
失业写写八股文1 小时前
Java类准备阶段深度解析:内存布局与初始值设定规则
java·jvm
论迹1 小时前
【数据结构】-- LinkedList与链表(2)
java·开发语言·数据结构·链表
江沉晚呤时2 小时前
深入理解 C# 反射:基础原理与实际应用
开发语言·c#
乌云暮年2 小时前
算法刷题整理合集(一)
java·开发语言·算法·蓝桥杯·模拟
侧耳倾听1112 小时前
JVM之类文件结构
java·开发语言·jvm
java1234_小锋2 小时前
一周学会Flask3 Python Web开发-使用SQLAlchemy动态创建数据库表
开发语言·数据库·python·flask·flask3
橘子真甜~2 小时前
36.C++二叉树进阶5(平衡二叉搜索树 - 红黑树及其插入操作图解)
开发语言·数据结构·c++·算法·面试·二叉树·红黑树