使用arthas排查cpu飙高问题

本文介绍了如何使用Arthas工具来诊断和分析Java应用程序中CPU使用率过高的问题。通过下载并启动Arthas,选择目标JVM进程,筛选出占用CPU资源较高的线程,然后对日志进行分析,找出导致CPU飙升的具体线程和代码位置,例如在Java04类中的`录单-thread`。这为优化Java应用性能提供了有效的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述

官方文档:https://arthas.aliyun.com/doc

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

在这里插入图片描述

2. 启动

直接用java -jar的方式启动:

java -jar arthas-boot.jar --repo-mirror aliyun --use-http

在这里插入图片描述

说明:由于arthas监控的是jvm的进程,因此,启动arthas之前需要提前启动jvm的进程

先运行咱们的测试类Java04

java Java04

演示CPU飙高代码

public class Java04 {

    public static void main(String[] args) {
        new Thread(()->{
            while (true){
                System.out.println("1111111");
            }
        },"录单-thread").start();
    }
}
3. 选择指定jvm进程

然后,arthas就会提示,已经找到服务器上的关于jvm的进行列表,请选择进行编号,然后arthas就会对你指定的jvm进程进行监控,并将监控日志输出到目录中。

在这里插入图片描述

top -c

在这里插入图片描述

4. 筛选线程

查询当前进行中,哪个线程占用CPU比较高呢

排列出当前进程前3个占用cpu较高的线程

thread -n 3

在这里插入图片描述

5. 日志分析
[arthas@26289]$ thread -n 3
"录单-thread" Id=8 cpuUsage=92.79% deltaTime=189ms time=52158ms RUNNABLE (in native)
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:326)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    at java.io.PrintStream.write(PrintStream.java:482)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
    at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
    at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
    at java.io.PrintStream.newLine(PrintStream.java:546)
    at java.io.PrintStream.println(PrintStream.java:807)
    at Java04.lambda$main$0(Java04.java:6)
    at Java04$$Lambda$1/471910020.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)

"arthas-command-execute" Id=23 cpuUsage=1.06% deltaTime=2ms time=10ms RUNNABLE
    at sun.management.ThreadImpl.dumpThreads0(Native Method)
    at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:448)
"VM Periodic Task Thread" [Internal] cpuUsage=0.25% deltaTime=0ms time=58ms
[arthas@26289]$ 

从日志可以分析出:

①"录单-thread" Id=8 cpuUsage=92.79% ,是在Java04类中导致的,进一步查看这个类中“录单-thread”的处理业务
②"arthas-command-execute" Id=23 cpuUsage=1.06%,这个是arthas监控工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gblfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值