有关Linux系统中CPU使用率过高的故障排除思路和解决方案
更新时间:2019年7月16日09:07:18作者:王老师谈运维
本文主要向您介绍Linux系统中CPU使用率过高的故障排除思路和解决方案。本文介绍的示例代码非常详细,对于每个人学习或使用Linux都有一定的参考学习价值。你们的朋友,让我们一起学习。
前言
作为Linux运维工程师,在日常工作中,我们会遇到Linux服务器上的CPU负载高100%的情况。如果CPU继续高位运行,将会影响业务系统的正常运行,并给企业带来损失。

许多操作和维护学生在遇到这种情况时常常感到茫然。通常使用以下两种方法来快速定位CPU过载问题:
方法1
第一步:使用
top命令,然后按shift + p按CPU排序
找到占用过多CPU的进程的pid
第2步:使用
top -H -p [进程ID]
找到在进程中消耗最多资源的线程的ID
第3步:使用
echo'obase = 16; [线程ID]'| bc或printf“%x \ n” [线程ID]
将线程ID转换为十六进制(字母应为小写)
bc是linux的计算器命令

第4步:执行
jstack [进程ID] | grep -A 10 [十六进制线程ID]“
查看线程状态信息
方法二
第一步:使用
top命令,然后按shift + p按CPU排序
查找占用过多CPU的进程
第2步:使用
ps -mp pid -o螺纹,tid,时间|排序-rn
获取线程信息,并找到CPU使用率高的线程
第3步:使用
echo'obase = 16; [线程ID]'| bc或printf“%x \ n” [线程ID]
将所需的线程ID转换为十六进制格式
第4步:使用
jstack pid | grep tid -A 30 [十六进制的线程ID]
打印线程堆栈信息
案例分析
场景描述

解决生产环境中JAVA进程的高CPU使用率
解决过程
1、根据最高命令,发现使用PID 2633的Java进程占用了300%的CPU和故障。
2、找到进程后,如何找到特定的线程或代码?首先显示线程列表,然后根据CPU使用率高的线程对其进行排序:
[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn
显示的结果如下:

找到最耗时的线程(TID)3626,它占用了12分钟的CPU时间!
3、将所需的线程TID转换为十六进制格式

[root@localhost ~]# printf "%x\n" 3626 e18
4、最后,使用jstack命令在进程下方打印出线程的堆栈信息:
[root@localhost ~]# jstack 2633 |grep "e18" -A 30
与故障排除相比,发现故障同样重要!市场上大多数监视软件都可以实现服务器负载的实时观察,例如:Zabbix,Nagios,阿里云监视(用于云服务器)等。但是,大多数软件需要运维生来积极设置规则或发现问题以发现问题。如何被动接收警报?
我推荐一个实用的运维软件-王教授。对于已经在阿里云上部署业务的用户,他们只需要绑定需要监视的只读AcessKey,即可将云上资源的警报信息及时通知相应的团队成员。

从主动变为被动的方式,一方面减少了运维工程师的工作量,另一方面也减少了疏忽或无知的警告。
摘要
以上是本文的全部内容。希望本文的内容对每个人的学习或工作都有一定的参考价值。感谢您对Scripthome的支持。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-340461-1.html
在别的地方我可以让着你
即使是自家住宅