烂笔头

不积跬步无以至千里

0%

JVM引起的CPU高占用排查

  1. 使用top命令找到CPU高的进程

  2. 打印线程堆栈信息 —- jstack命令

    1
    jstack pid > jstackpid.out

    输出内容中nid,tid含义

    nid : 对应的Linux操作系统下的tid线程号,16进制数字
    这个应该是jvm的jmm内存规范中的唯一地址定位
    在CPU过高的情况下,查找响应的线程,一般定位都是用nid来定位的。而如果发生死锁之类的问题,一般用tid来定位。

  3. 查看线程下具体进程信息,找出占用CPU较高的线程

    1
    top -H -p pid
  4. 将线程ID转成16进制

    1
    printf "%x\n" tid

    得到输出结果:如cc5

  5. 在jstackpid.out中查找nid=0xcc5定位就找到具体问题了