千家信息网

Linux系统CPU占用率较高问题怎么进行排查

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,本篇内容介绍了"Linux系统CPU占用率较高问题怎么进行排查"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2024年11月20日Linux系统CPU占用率较高问题怎么进行排查

本篇内容介绍了"Linux系统CPU占用率较高问题怎么进行排查"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

很多运维的同学遇到这种状况往往会不知所措,对于CPU过载问题通常使用以下两种方式即可快速定位:

方法一

第一步:使用

top命令,然后按shift+p按照CPU排序

找到占用CPU过高的进程的pid

第二步:使用

top -H -p [进程id]

找到进程中消耗资源***的线程的id

第三步:使用

echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id]

将线程id转换为16进制(字母要小写)

bc是linux的计算器命令

第四步:执行

jstack [进程id] |grep -A 10 [线程id的16进制]"

查看线程状态信息

方法二

***步:使用

top命令,然后按shift+p按照CPU排序

找到占用CPU过高的进程

第二步:使用

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

获取线程信息,并找到占用CPU高的线程

第三步:使用

echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id]

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

第四步:使用

jstack pid |grep tid -A 30 [线程id的16进制]

打印线程的堆栈信息

案例分析

1. 场景描述

生产环境下JAVA进程高CPU占用故障排查

2. 解决过程

(1) 根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。

(2) 找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:

[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn

显示结果如下:

找到了耗时***的线程(TID)3626,占用CPU时间有12分钟了!

(3) 将需要的线程TID转换为16进制格式

[root@localhost ~]# printf "%x\n" 3626 e18

(4) ***使用jstack命令打印出该进程下面的此线程的堆栈信息:

[root@localhost ~]# jstack 2633 |grep "e18" -A 30

"Linux系统CPU占用率较高问题怎么进行排查"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0