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
相關文章
相關標籤/搜索