当前位置: 首页 > news >正文

JVM之Arthas的dashboard命令以及CPU飙高场景

 

博主介绍:✌全网粉丝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

dashboard 是 Arthas 中一个非常强大的命令,用于实时监控 Java 应用的运行状态。它可以显示 JVM 的 CPU、内存、线程、GC 等信息,帮助开发者快速定位性能问题。


1. 启动 Arthas

在终端中启动 Arthas:

java -jar arthas-boot.jar

选择需要诊断的 Java 进程(输入进程编号)。


2. 使用 dashboard 命令

在 Arthas 命令行中输入:

dashboard

此时会进入一个实时监控界面,显示当前 Java 应用的运行状态。


3. dashboard 界面详解

dashboard 界面通常分为以下几个部分:

1. ID

  • 当前 Java 进程的 ID。

2. NAME

  • 当前 Java 进程的名称。

3. GROUP

  • 当前 Java 进程的组。

4. PRIORITY

  • 当前 Java 进程的优先级。

5. STATE

  • 当前 Java 进程的状态。

6. CPU

  • Total:JVM 进程占用的 CPU 百分比。

  • User:用户态 CPU 占用百分比。

  • Sys:内核态 CPU 占用百分比。

7. MEMORY

  • Used:已使用的内存大小。

  • Max:最大可用内存大小。

  • Usage:内存使用率。

8. THREAD

  • Total:当前 JVM 中的线程总数。

  • RUNNABLE:处于可运行状态的线程数。

  • BLOCKED:处于阻塞状态的线程数。

  • WAITING:处于等待状态的线程数。

  • TIMED_WAITING:处于定时等待状态的线程数。

9. GC

  • Young GC:年轻代 GC 的次数和时间。

  • Full GC:老年代 GC 的次数和时间。

10. Runtime

  • Uptime:JVM 运行时间。

  • Start Time:JVM 启动时间。

11. Class Loading

  • Loaded:已加载的类数量。

  • Unloaded:已卸载的类数量。

12. Thread Details

  • 显示当前占用 CPU 最高的线程信息,包括:

    • ID:线程 ID。

    • NAME:线程名称。

    • STATE:线程状态。

    • CPU%:线程占用的 CPU 百分比。

    • TIME:线程运行时间。


4. 常用操作

刷新频率

  • 默认情况下,dashboard 每秒刷新一次。

  • 可以通过 -i 参数设置刷新间隔(单位:秒):

    dashboard -i 2

    每 2 秒刷新一次。

退出 dashboard

  • 按下 q 键退出 dashboard 界面,返回 Arthas 命令行。


5. 使用场景

1. 监控 CPU 使用率

  • 查看 CPU 部分,确认 JVM 进程的 CPU 使用率是否过高。

  • 查看 Thread Details,找到占用 CPU 最高的线程。

2. 监控内存使用情况

  • 查看 MEMORY 部分,确认内存使用率是否过高。

  • 如果内存使用率持续增长,可能存在内存泄漏。

3. 监控线程状态

  • 查看 THREAD 部分,确认是否有大量线程处于 BLOCKED 或 WAITING 状态。

  • 如果有,可能存在锁竞争或资源等待问题。

4. 监控 GC 情况

  • 查看 GC 部分,确认 Young GC 和 Full GC 的次数和时间。

  • 如果 Full GC 频繁发生,可能存在内存不足或内存泄漏问题。


6. 示例

场景 1:CPU 飙升

  1. 启动 Arthas:

    java -jar arthas-boot.jar

  2. 输入 dashboard,查看 CPU 和 Thread Details

  3. 找到占用 CPU 最高的线程,记录其线程 ID。

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

具体模拟场景

1、模拟线程一直消耗CPU资源,注意一定要给线程加上一个名字才能更好排查系统问题

package ceam.test.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/poi/thread")
public class ThreadController {

    @GetMapping
    public void thread() {
        Thread thread = new Thread(() -> {
            while (true) {
                System.out.println("=======模拟线程一直在消耗CPU资源,Arthas中可以看到其CPU很高======");
            }
        }, "threadController-test");
        thread.start();
    }
}

2、启动Arthas跟进该接口对应的进程

3、dashboard查看可见ID为54的线程CPU最高,即我们自己创建的线程threadController-test

4、thread -n  3

可见threadController-test这个线程消耗CPU资源是最高的

5、thread 线程ID,排查具体问题代码

可见是在执行run方法时消耗资源的,在ThreadController代码的第15行位置

场景 2:内存泄漏

  1. 启动 Arthas:

    java -jar arthas-boot.jar

  2. 输入 dashboard,查看 MEMORY 部分。

  3. 如果内存使用率持续增长,使用 heapdump 导出堆内存快照,进一步分析。


7. 总结

dashboard 是 Arthas 中最常用的命令之一,能够实时监控 Java 应用的运行状态,帮助开发者快速定位以下问题:

  • CPU 飙升:查看 CPU 和 Thread Details

  • 内存泄漏:查看 MEMORY 和 GC

  • 线程问题:查看 THREAD 和 Thread Details

通过 dashboard,可以快速了解系统的整体运行状况,为后续的深入排查提供方向。

3

相关文章:

  • 【面试】MySQL
  • 江科大51单片机笔记【12】AT24C02(I2C总线)
  • python 提取视频中的音频
  • CSDN统计个人创作总字数
  • Java对接AI大模型(一)【Langchain4j】
  • mcp 是一种什么协议,怎么构建mcpserver,怎么实现多智能体的调用
  • 6. MySQL 索引的数据结构(详细说明)
  • 【MyBatis Plus中DB包的静态方法详解】
  • 计算机四级 -数据库原理 - 第1章「数据库原理概述」
  • SpringBoot注解驱动CRUD工具:spring-avue-plus
  • 概率论与数理统计
  • MyBatis的级联查询(一对一、一对多、多对多)
  • 前端系统测试(单元、集成、数据|性能|回归)
  • Spring Boot中的404错误:原因、影响及处理策略
  • 基于阿里云服务器搭建个人图床
  • 如何使用Cursor的claude-3.7模型来开发高保真的原型设计图,学会写好的提示词人人都是设计师
  • MySQL 存储引擎与事务深度解析
  • opencv+ONNX模型的推理
  • 不定方程求解(信息学奥赛一本通-1101)
  • EB-Cable许可管理中的数据安全与隐私保护
  • 李在明回应韩国大法院判决:与自己所想截然不同,将顺从民意
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • “80后”杨占旭已任辽宁阜新市副市长,曾任辽宁石油化工大学副校长
  • 专访|200余起诉讼,特朗普上台100天,美国已进入宪政危机
  • 中使馆:奉劝菲方有关人士不要在台湾问题上挑衅,玩火者必自焚
  • 大学男生被捉奸后将女生推下高楼?桂林理工大学辟谣