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

 更新时间:2019年07月16日 09:07:18   作者:老王谈运维  
这篇文章主要给大家介绍了关于Linux系统中CPU占用率较高问题排查思路与解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

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

alt

很多运维的同学遇到这种状况往往会不知所措,对于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

显示结果如下:

alt

找到了耗时最高的线程(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,即可将云上资源的告警信息及时通知给对应的团队成员。

alt

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

总结

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

相关文章

  • linux的最大打开文件数限制修改方法

    linux的最大打开文件数限制修改方法

    这篇文章主要给大家介绍了关于linux最大打开文件数限制修改的方法,文中将实现的方法一步步介绍的非常详细,对同样遇到这个需求的朋友们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    2017-10-10

  • Ubuntu下如何创建XFS文件系统的LVM详解

    Ubuntu下如何创建XFS文件系统的LVM详解

    这篇文章主要给大家介绍了关于在Ubuntu下如何创建XFS文件系统的LVM的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    2018-10-10

  • Logrotate实现Catalina.out日志每俩小时切割示例

    Logrotate实现Catalina.out日志每俩小时切割示例

    Logrotate是一个日志文件管理工具,它是Linux默认自带的一个日志切割工具。本篇文章主要介绍了Logrotate实现Catalina.out日志每俩小时切割示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助

    2019-02-02

  • linux下配置yum源方法详解

    linux下配置yum源方法详解

    本篇文章主要介绍了linux下配置yum源方法详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    2016-12-12

  • linux查看防火墙是否关闭的实例方法

    linux查看防火墙是否关闭的实例方法

    在本篇文章里小编给各位分享的是关于linux查看防火墙是否关闭的实例方法,需要的朋友们可以学习下。

    2020-03-03

  • Linux 基于CentOS的LNMP 服务器部署标准 新手简明版

    Linux 基于CentOS的LNMP 服务器部署标准 新手简明版

    Linux 基于CentOS的LNMP 服务器部署标准 新手简明版,需要配置centos服务器的朋友可以参考下。

    2011-01-01

  • Linux系统利用cp命令实现强制覆盖功能的方法

    Linux系统利用cp命令实现强制覆盖功能的方法

    cp命令是我日常学习中经常会遇到的一个命令,下面这篇文章主要给大家介绍了关于Linux系统利用cp命令实现强制覆盖功能的方法,并且给大家简单的介绍了cp命令的基础知识,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    2017-11-11

  • Linux中的screen命令使用详解

    Linux中的screen命令使用详解

    这篇文章主要介绍了Linux中的screen命令使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    2019-12-12

  • Linux 添加永久静态路由的方法

    Linux 添加永久静态路由的方法

    本篇文章主要介绍了Linux 添加永久静态路由的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    2017-02-02

  • 详解centos7使用无线wifi连接的方法

    详解centos7使用无线wifi连接的方法

    本篇文章主要介绍了centos7使用无线wifi连接的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    2016-12-12

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。