JVM内存及CPU占用太高排查

问题排查方法

方法一

  1. 经过top命令查看当前CPU及内存状况java

    top
    86786  java         98.4 13:22.7
  2. 得到pid,经过top -H -p86786查看有问题的线程bash

    说明: -H 指显示线程,-p 是指定进程
  3. 能够看到两个CPU或内存占用较高的线程,记下PID( 此处的PID即为线程ID标识) ,将其从十进制转成十六进制表示,如0x7f1线程

    printf "%x\n" tid
    0x7f1
  4. 经过jstack命令获取当前线程栈,可暂时保存到一个文件tempfile.txt中,在tempfile.txt中查找nid=0x7f1的线程code

    jstack pid | grep '0x7f1'

方法二

  1. 查进程ID ps -ef|grep javaps -ef|grep java
  2. ps -mp 8514 -o THREAD,tid,time,pmem 查出进程下线程信息,能够查出%CPU高,TIME长的线程ID(tid)
  3. printf "%x\n" 8593 tid(8593)转化为十六进制2191
  4. jstack 8514|grep 2191 打印出堆栈信息

经常使用命令

查看指定进程下线程的ID,时间,cpu,内存状况并根据消耗时间排序
ps -mp 9793 -o user,pid,ppid,tid,time,%cpu,%mem,cmd | sort -rk5
相关文章
相关标签/搜索