序言
作为Linux运维工程师,在日常工作中我们会碰到Linux服务器上出现CPU负载达到100%居高不下的情况中文linux操作系统,若果CPU持续跑高,则会影响业务系统的正常运行,带来企业损失。
好多运维的朋友遇见这些状况常常会不知所措,对于CPU过载问题一般使用以下两种方法即可快速定位:
方式一
第一步:使用
top命令,之后按shift+p根据CPU排序
找到占用CPU偏低的进程的pid
第二步:使用
top-H-p[进程id]
找到进程中消耗资源最高的线程的id
第三步:使用
echo‘obase=16;[线程id]’|bc或则printf“%xn”[线程id]
将线程id转换为16补码(字母要大写)
bc是linux的估算器命令
第四步:执行
jstack[进程id]|grep-A10[线程id的16补码]”
查看线程状态信息
方式二
第一步:使用
top命令,之后按shift+p根据CPU排序
找到占用CPU偏低的进程
第二步:使用
ps-mppid-oTHREAD,tid,time|sort-rn
获取线程信息,并找到占用CPU高的线程
第三步:使用
echo‘obase=16;[线程id]’|bc或则printf“%xn”[线程id]
将须要的线程ID转换为16补码格式
第四步:使用
jstackpid|greptid-A30[线程id的16补码]
复印线程的堆栈信息
案例剖析
场景描述
生产环境下JAVA进程高CPU占用故障排查
解决过程
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 "%xn" 3626
e18
复制
4、最后使用jstack命令复印出该进程下边的此线程的堆栈信息:
[root@localhost ~]# jstack 2633 |grep "e18" -A 30
复制
相比故障的解决而言,发觉故障也同等的重要!市场上的大多数监控软件都能实现服务器负载的实时观测,例如:Zabbix、Nagios、阿里云监控(针对云服务器)等。并且当中大部份的软件都须要运维朋友主动去设置规则或则检查能够发觉问题,怎么被动的也能收到告警呢?
推荐你们一个实用的运维软件——王院长linux操作系统论文,对于业务布署在阿里云上的用户,只需绑定须要监控的只读AcessKeylinux cpu使用率高,即可将云上资源的告警信息及时通知给对应的团队成员。
化主动为被动的方法linux cpu使用率高,一方面减少了运维工程师的工作,另一方面也减少了运维漏看或则忽视告警的情况发生。
总结
以上就是这篇文章的全部内容了,希望本文的内容对你们的学习或则工作具有一定的参考学习价值,感谢你们对ZaLou.Cn的支持。