JAVA Linux 排查CPU 过高的方法

原文:https://blog.csdn.net/zhanglh046/article/details/50443528 

方法一
1 ps -ef | grep java 查找java 进程号
2 top -p PID -H 观察占用CPU较多的线程
3 找出CPU消耗较多的线程id,如15844,将15844转换为16进制0x3de4,注意是小写哦
4 使用jstack PID |grep -A 10 0x3de4来查询出具体的线程状态。


方法二
观察cpu 使用情况

ps -mp 21896 -o THREAD,tid,time | sort -rn

将需要的线程ID转换为16进制格式:

[root@localhost logs]# printf "%x\n" 21520
e18

最后打印线程的堆栈信息:

[root@localhost logs]# jstack 2633 |grep e18 -A 30
jstack 21896 | grep 0x5599 -A 30

各个指标:
(1)load average:此值反映了任务队列的平均长度;如果此值超过了CPU数量,则表示当前CPU数量不足以处理任务,负载过高
(2)%us:用户CPU时间百分比;如果此值过高,可能是代码中存在死循环、或是频繁GC等
(3)%sy:系统CPU时间百分比;如果此值过高,可能是系统线程竞争激烈,上下文切换过多,应当减少线程数
(4)%wa:等待输入、输出CPU时间百分比;如果此值过高,说明系统IO速度过慢,CPU大部分时间都在等待IO完成
(5)%hi:硬件中断CPU百分比;当硬件中断发生时,CPU会优先去处理硬件中断;比如,网卡接收数据会产生硬件中断
(6)swap used:被使用的swap;此值过高代表系统因为内存不足在进行频繁的换入、换出操作,这样会影响效率,应增大内存量
(7)%CPU:进程使用CPU的百分比;此值高表示CPU在进行无阻塞运算等

猜你喜欢

转载自blog.csdn.net/aa5305123/article/details/83246540