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

相关推荐
fpcc25 分钟前
跟我学c++中级篇——理解类型推导和C++不同版本的支持
开发语言·c++
莱茵菜苗37 分钟前
Python打卡训练营day46——2025.06.06
开发语言·python
爱学习的小道长39 分钟前
Python 构建法律DeepSeek RAG
开发语言·python
luojiaao1 小时前
【Python工具开发】k3q_arxml 简单但是非常好用的arxml编辑器,可以称为arxml杀手包
开发语言·python·编辑器
终焉代码1 小时前
STL解析——list的使用
开发语言·c++
SoFlu软件机器人1 小时前
智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
java·开发语言·架构
英英_1 小时前
视频爬虫的Python库
开发语言·python·音视频
猛犸MAMMOTH1 小时前
Python打卡第46天
开发语言·python·机器学习
多多*2 小时前
微服务网关SpringCloudGateway+SaToken鉴权
linux·开发语言·redis·python·sql·log4j·bootstrap
梓仁沐白2 小时前
【Kotlin】协程
开发语言·python·kotlin