写点什么

Linux 系统中 CPU 占用率较高问题排查思路与解决方法

作者:A-刘晨阳
  • 2022-11-15
    北京
  • 本文字数:997 字

    阅读完需:约 3 分钟

这篇文章主要给大家介绍了关于 Linux 系统中 CPU 占用率较高问题排查思路与解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用 Linux 具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

作为 Linux 运维工程师,在日常工作中我们会遇到 Linux 服务器上出现 CPU 负载达到 100%居高不下的情况,如果 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 进制]


打印线程的堆栈信息

案例分析

结合上面来做。

场景描述

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

解决过程

1、根据 top 命令,shift+p,发现 PID 为 41673 的 Java 进程占用 CPU 高达 250%,出现故障。



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


[root@localhost ~]# ps -mp 41673 -o THREAD,tid,time | sort -rn
复制代码


显示结果如下:



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


[root@localhost ~]# printf "%x\n" 41846a376
复制代码


4、最后使用 jstack 命令打印出该进程下面的此线程的堆栈信息:


[root@localhost ~]# jstack 41673 |grep "a376" -A 30
复制代码

解决办法

1、根据 top 命令,shift+p,发现 PID 为 41673 的 Java 进程占用 CPU 高达 250%,出现故障。



2、根据 pid 查看他的进程看看是什么服务占用这么高


ps -ef |grep -v grep | grep 41673
复制代码



3、查看到是一个 java 进程占用这么高,然后看看有没有用,没有用的话就杀掉它


kill -9 41673
复制代码


4、再次 top 查看 cpu 整体就降下来了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持。


发布于: 刚刚阅读数: 5
用户头像

A-刘晨阳

关注

还未添加个人签名 2022-06-16 加入

本人公众号《小刘Linux》,优质博主,欢迎大家的关注

评论

发布
暂无评论
Linux系统中CPU占用率较高问题排查思路与解决方法_Linux_A-刘晨阳_InfoQ写作社区