美文网首页
CPU异常排查思路

CPU异常排查思路

作者: 小孩真笨 | 来源:发表于2020-12-01 15:18 被阅读0次

    CPU异常通常有如下几个原因:

    • 业务逻辑问题(死循环)
    • 频繁GC
    • 上下文切换较多

    其中, 业务逻辑问题可以使用jstack来分析对应的堆栈情况。

    一、使用jstack来分析cpu问题的步骤

    1. 使用top命令,查看CPU占用较高的服务进程

    通过top命令,最前面一列是对应的进程pid

    2. 使用top -H -p pid找到进程中占用cpu较高的线程

    3. 将占用最高的pid转换为16进制的nid

    printf '%x\n' pid
    

    4. 在jstack中找到堆栈信息

    jstack pid | grep 'nid' -C5 -color
    

    此时必然可以看到对应的nid的堆栈信息。剩下的只要仔细分析即可。

    分析的时候,需要重点关注WAITTINGTIMED_WAITING的部分,BLOCKED就不用说了。

    可以使用命令cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c来对jstack状态做一个整体的把握,如果WAITING之类的特别多,多半是有问题的。

    二、使用jstat分析GC情况

    jstat -gc pid 1000
    该命令可以实现对GC分代情况进行观察,1000表示采样间隔(ms),S0C/S1C、S0U/S1U、EC/EU、OC/OU、MC/MU分别表示两个Survivor区,Eden区、老年代、元数据区的容量和使用量。

    YGC/YGT、FGC/FGCT、GCT 则代表YoungGC、FullGC的耗时和次数,以及总耗时。

    如果看到gc比较频繁,再针对gc方面做进一步分析。

    三、 使用vmstat分析上下文切换

    针对频繁的上下文切换问题,我们可以使用vmstat命令来进行查看。



    其中,cs(context switch)一列则代表上下文切换的次数。

    扩展
    如果要对特定的pid进行监控,可以使用pidstat -w pid命令,cswch和nvcswch表示自愿以及非自愿切换。

    相关文章

      网友评论

          本文标题:CPU异常排查思路

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