JVM之Arthas排查问题

发布于:2025-03-10 ⋅ 阅读:(93) ⋅ 点赞:(0)

 

博主介绍:✌全网粉丝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
    • 使用 MAT 或 JVisualVM 分析 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. 使用 trace 或 watch 进一步分析问题方法。


内存泄漏

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

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

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

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


方法性能问题

  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


网站公告

今日签到

点亮在社区的每一天
去签到