美文网首页Linux运维
排查线上CPU飙高

排查线上CPU飙高

作者: flyjar | 来源:发表于2022-04-08 23:04 被阅读0次

    1、本案例的排查过程使用的阿里开源的Arthas工具进行的,不使用arthas,使用JDK自带的命令也是可以。

    2、在开始排查之前,可以先看一下CPU的使用情况,最简单的就是使用top命令直接查看(大写P按照CPU占用率排序):

    top - 10:32:38 up 11 days, 17:56,  0 users,  load average: 0.84, 0.33, 0.18
    Tasks:  23 total,   1 running,  21 sleeping,   0 stopped,   1 zombie
    %Cpu(s): 95.5 us,  2.2 sy,  0.0 ni, 76.3 id,  0.0 wa,  0.0 hi,  0.0 si,  6.1 st
    KiB Mem :  8388608 total,  4378768 free,  3605932 used,   403908 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  4378768 avail Mem
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND  
       3480 admin     20   0 7565624   2.9g   8976 S  241.2 35.8 649:07.23 java  
       1502 root      20   0  401768  40228   9084 S   1.0  0.5  39:21.65 ilogtail
       181964 root      20   0 3756408 104392   8464 S   0.7  1.2   0:39.38 java   
       496 root      20   0 2344224  14108   4396 S   0.3  0.2  52:22.25 staragentd  
       1400 admin     20   0 2176952 229156   5940 S   0.3  2.7  31:13.13 java
       235514 root      39  19 2204632  15704   6844 S   0.3  0.2  55:34.43 argusagent
       236226 root      20   0   55836   9304   6888 S   0.3  0.1  12:01.91 systemd-journ
    

    3、可以看到,进程ID为3480的Java进程占用的CPU比较高,基本可以断定是应用代码执行过程中消耗了大量CPU,接下来开始排查具体是哪个线程,哪段代码比较耗CPU。

    4、首先,下载Arthas命令:

    curl -L https://arthas.aliyun.com/install.sh | sh
    

    5、启动

    ./as.sh
    

    6、使用Arthas命令”thread -n 3 -i 1000″查看当前”最忙”(耗CPU)的三个线程:


    16165659820207.jpg

    通过上面的堆栈信息,可以看出,占用CPU资源的线程主要是卡在JDBC底层的TCP套接字读取上。连续执行了很多次,发现很多线程都是卡在这个地方。可以分析对应的代码。从而解决CPU飙高的问题

    相关文章

      网友评论

        本文标题:排查线上CPU飙高

        本文链接:https://www.haomeiwen.com/subject/vbeusrtx.html