美文网首页
java虚拟机故障排查-cpu高占比

java虚拟机故障排查-cpu高占比

作者: 快给我饭吃 | 来源:发表于2019-08-08 13:41 被阅读0次

    今天工作中发现,测试环境的机器特别卡顿,我们测试机上部署了几个Spring Boot构建的微服务,故查看了一下资源利用率。首先,输入top命令查看资源占用情况,按c完整显示COMMAND列,第一列的weixin模块CPU占比高达98.7%

    top

    如果上面不按c的话,可以使用jps -lv查看java进程,但这步骤没必要,因为top按c的话已经能查找到该微信模块的PID了,PID为17868。

    jps

    接下来查看哪个线程占用时间比较多。但是我先查看了gc情况,其实可以跳过这一步看下一步线程的占用情况。当然也可以先看下gc情况,使用sudo jstat -gcutil 17868 2000 10命令每2000ms打印一次gc共打印10次查看下17868 gc情况为啥cpu使用率这么高,-gcutil输出的是内存占比情况,内存占用比较满当了,不过gc次数不是特别明显。故cpu占用率高的原因不是gc频繁引起的。

    gcutil

    S0:幸存1区当前使用比例
    S1:幸存2区当前使用比例
    E:伊甸园区使用比例
    O:老年代使用比例
    M:元数据区使用比例
    CCS:压缩使用比例
    YGC:年轻代垃圾回收次数
    FGC:老年代垃圾回收次数
    FGCT:老年代垃圾回收消耗时间
    GCT:垃圾回收消耗总时间

    这时,同事重启了微信模块,PID变为5220,使用ps -mp 5220 -o THREAD,tid,time查看5520进程下哪个线程占用时间最多,可以看到5231线程占用最多时间,达到46.8秒。不过我更喜欢使用这个命令查看某进程创建的线程的情况top -H -p 5520

    ps -mp

    cpu信息一直在变化,可以先把使用jstack 5220 >> cpu.log把线程的堆栈信息保存下来。

    pipeline

    使用命令printf "%x\n" 5231命令将5231转为16进制

    printf

    查看该线程情况,是C2 CompilerThread0线程,该进程是重启服务时jit做代码hotspot时的操作,稳定后应该就不会有cpu占用高的情况了。

    C2 CompilerThread0

    相关文章

      网友评论

          本文标题:java虚拟机故障排查-cpu高占比

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