1.查看cpu占用多少
top命令,第3行
在第三行有显示CPU当前的使用情况。
[root@li676-235 ~]# top -bn 1 -i -c top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39 Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie Cpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
参数:
%us:表示用户空间程序的cpu使用率(没有通过nice调度)
%sy:表示系统空间的cpu使用率,主要是内核程序。
%ni:表示用户空间且通过nice调度过的程序的cpu使用率。
%id:空闲cpu
%wa:cpu运行时在等待io的时间
%hi:cpu处理硬中断的数量
%si:cpu处理软中断的数量
%st:被虚拟机偷走的cpu
2.通过top找到pid占用cpu最高的
然后通过ps aux | grep PID,来判断是哪个进程
3.显示进程中的线程列表
ps -mp pid -o THREAD,tid,time
找到占用cpu最高的线程tid
其次将需要的线程ID转换为16进制格式:
printf "%x\n" tid
最后打印线程的堆栈信息:
jstack pid |grep tid -A 30
可以看到程序第几行导致占用cpu高