• Linux系统CPU占用率较高问题排查思路


    作为 Linux 运维工程师,在日常工作中我们会遇到 Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行,带来企业损失。

    Linux 系统 CPU 占用率较高问题排查思路

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

    方法一

    ***步:使用

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

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

    第二步:使用

    1. top -H -p [进程id] 

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

    第三步:使用

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

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

    1. bc是linux的计算器命令 

    第四步:执行

    1. jstack [进程id] |grep -A 10 [线程id的16进制]” 

    查看线程状态信息

    方法二

    ***步:使用

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

    找到占用CPU过高的进程

    第二步:使用

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

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

    第三步:使用

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

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

    第四步:使用

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

    打印线程的堆栈信息

    案例分析

    1. 场景描述

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

    2. 解决过程

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

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

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

    显示结果如下:

    Linux 系统 CPU 占用率较高问题排查思路

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

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

    1. [root@localhost ~]# printf "%x " 3626 
    2. e18 

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

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

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

  • 相关阅读:
    一生不可错过的五句话
    分布式缓存系统Memcached简介与实践[转]
    telnet serverip serverport 可以测试服务器端口是否通
    使用c#生成高品质小空间的缩略图
    sql server2005对tsql的增强之在聚合函数的后面使用over关键字
    (转)让你受益终身的10个Word实用技巧
    sql取所有记录中每天的最后一笔交易的记录
    屏蔽服务器端包含在文件不存在时报错的错误信息
    c#农历日历类
    Niubility 英语教程
  • 原文地址:https://www.cnblogs.com/gucb/p/11229702.html
Copyright © 2020-2023  润新知