• 使用arthas排查cpu飙高问题


    https://blog.csdn.net/weixin_40816738/article/details/123308455

    https://blog.csdn.net/alisystemsoftware/article/details/110393949

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

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


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

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


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

    先运行咱们的测试类Java04

    java Java04
    1
    演示CPU飙高代码

    public class Java04 {

    public static void main(String[] args) {
    new Thread(()->{
    while (true){
    System.out.println("1111111");
    }
    },"录单-thread").start();
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    3. 选择指定jvm进程
    然后,arthas就会提示,已经找到服务器上的关于jvm的进行列表,请选择进行编号,然后arthas就会对你指定的jvm进程进行监控,并将监控日志输出到目录中。

    top -c
    1


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

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

    thread -n 3
    1


    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]$

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    从日志可以分析出:

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

  • 相关阅读:
    Triggering effects when a container is resized
    Flex2:无边框透明背景MenuBar实现
    Using the isBranch() method to determine if a Tree item is a branch or leaf
    Flex3 Style 编辑工具
    Displaying a Tree control as a pop up for a Flex PopUpButton control
    Using a CheckBox control as a list item renderer in Flex
    Creating a ControlBar container in Flex using ActionScript
    .NET下的多线程编程4利用thread.Start()传递参数
    委托使用的实例
    算法大全—1冒泡排序法
  • 原文地址:https://www.cnblogs.com/zhoading/p/16091108.html
Copyright © 2020-2023  润新知