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

相关推荐
J2K10 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
侃侃_天下15 小时前
最终的信号类
开发语言·c++·算法
Slaughter信仰16 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
echoarts16 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix16 小时前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题17 小时前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说17 小时前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔17 小时前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
我是菜鸟0713号18 小时前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_18 小时前
QT(4)
开发语言·汇编·c++·qt·算法