• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux系统中CPU占用率较高问题排查思路与解决方法

    前言

    作为 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命令,发现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

    相比故障的解决而言,发现故障也同等的重要!市场上的大多数监控软件都能实现服务器负载的实时观测,比如:Zabbix、Nagios、阿里云监控(针对云服务器)等。但是当中大部分的软件都需要运维同学主动去设置规则或者检测才能发现问题,如何被动的也能收到告警呢?

    推荐大家一个实用的运维软件——王教授,对于业务部署在阿里云上的用户,只需绑定需要监控的只读AcessKey,即可将云上资源的告警信息及时通知给对应的团队成员。

    化主动为被动的方式,一方面减轻了运维工程师的工作,另一方面也减小了运维漏看或者忽略告警的情况发生。

    总结

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

    上一篇:在Linux中查看及终止正在运行的后台程序方法
    下一篇:将spring boot应用打入docker中运行的实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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