可按照如下步骤进行排查
1、执行top命令,找到cpu占用比较高的进程
2、打印该进程的堆栈信息(jstack),保存到文件中备用
jstack 进程ID > high_cpu.txt
3、找到进程中CPU占用比较高的线程,将线程ID转换为16进制
top -p 进程ID -H
4、从2中的堆栈信息文件中,找出该线程ID(16进制)对应的堆栈信息
top命令:
第一行:基本信息
top - 20:50:42 up 190 days, 10:48, 4 users, load average: 0.24, 0.32, 0.30
0:50:42 up 190 days, 10:48:当前时间和系统运行时间
4 users:当前登录用户数
load average: 0.24, 0.32, 0.30:系统负载,三个数字分别表示1分钟、5分钟、15分钟前到现在的平均值
第二行:任务信息
total:进程总数
running:正在运行的进程数
sleeping:睡眠状态的进程数
stopped:停止的进程数
zmobie:僵尸进程数
第三行:CPU使用情况
us:User Time,CPU执行用户进程百分比,包括Nice Time
sy:System Time,CPU在内核运行百分比,包括IRQ和SoftIRQ
ni:Nice Time,调整进程优先级所用百分比
id:idle Time,系统空闲百分比
wa:Waiting Time,CPU等待I/O完成所有百分比
hi:Hard IRQ Time,硬中断占用的CPU时间百分比
si:Soft IRQ Time,软中断占用CPU的时间百分比
st:Steal Time,虚拟服务占用
第四行:物理内存使用情况
total:总物理内存
free:空闲的物理内存
used:已使用的内存
buff/cache:缓冲区和缓存占用内存的总量
第五行:交换区使用情况
total:交换区的总量
free:未使用的量
used:已使用的量
avail Mem:可用的内存量
第六行:进程详细信息
PID:进程ID
USER:进程所有者的用户名
PR:优先级
NI:nice值
VIRT:进程使用的虚拟内存总量,单位KB
RES:进程使用的,未被换出的物理内存大小,单位KB
SHR:共享内存大小,单位KB
S:进程状态 (D:不可中断的睡眠状态,R:运行,S:睡眠,T:跟踪/停止,Z:僵尸进程)
%CPU:上次更新到现在的CPU时间占比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间统计,单位1/100秒
CMMAND:命令名/命令行