本篇将介绍CPU使用率过高的处理方案。

CPU使用率

CPU使用率过高,跟内存和进程都有关系,例如复杂运算,一般都会导致CPU升高。使用top命令查看(按1可以查看多核的CPU使用情况):

产生原因

第三行 CPU 占用率根据类型有以下几种情况:

  • (us) user:CPU 在低 nice 值(高优先级)用户态所占用的时间(nice<=0)。正常情况下只要服务器不是很闲,那么大部分的 CPU 时间应该都在此执行这类程序
  • (sy) system:CPU 处于内核态所占用的时间,操作系统通过系统调用(system call)从用户态陷入内核态,以执行特定的服务;通常情况下该值会比较小,但是当服务器执行的 IO 比较密集的时候,该值会比较大
  • (ni) nice:CPU 在高 nice 值(低优先级)用户态以低优先级运行占用的时间(nice>0)。默认新启动的进程 nice=0,是不会计入这里的,除非手动通过 renice 或者 setpriority() 的方式修改程序的nice值
  • (id) idle:CPU 在空闲状态(执行 kernel idle handler )所占用的时间
  • (wa) iowait:等待 IO 完成做占用的时间
  • (hi) irq:系统处理硬件中断所消耗的时间
  • (si) softirq:系统处理软中断所消耗的时间,记住软中断分为 softirqs、tasklets (其实是前者的特例)、work queues,不知道这里是统计的是哪些的时间,毕竟 work queues 的执行已经不是中断上下文了
  • (st) steal:在虚拟机情况下才有意义,因为虚拟机下 CPU 也是共享物理 CPU 的,所以这段时间表明虚拟机等待 hypervisor 调度 CPU 的时间,也意味着这段时间 hypervisor 将 CPU 调度给别的 CPU 执行,这个时段的 CPU 资源被“stolen”了。

排查步骤

CPU 占用率高很多情况下意味着一些东西,这也给服务器 CPU 使用率过高情况下指明了相应地排查思路:

  1. 当 user 占用率过高的时候,通常是某些个别的进程占用了大量的 CPU,这时候很容易通过 top 找到该程序;此时如果怀疑程序异常,可以通过 perf 等思路找出热点调用函数来进一步排查;

  2. 当 system 占用率过高的时候,如果 IO 操作(包括终端 IO)比较多,可能会造成这部分的 CPU 占用率高,比如在 file server、database server 等类型的服务器上,否则(比如>20%)很可能有些部分的内核、驱动模块有问题;

  3. 当 nice 占用率过高的时候,通常是有意行为,当进程的发起者知道某些进程占用较高的 CPU,会设置其 nice 值确保不会淹没其他进程对 CPU 的使用请求;

  4. 当 iowait 占用率过高的时候,通常意味着某些程序的 IO 操作效率很低,或者 IO 对应设备的性能很低以至于读写操作需要很长的时间来完成;

  5. 当 irq/softirq 占用率过高的时候,很可能某些外设出现问题,导致产生大量的irq请求,这时候通过检查 /proc/interrupts 文件来深究问题所在;

  6. 当 steal 占用率过高的时候,黑心厂商虚拟机超售了吧!

  7. top -c 然后按P,获取CPU使用率最高的进程

  • 如果是Java类应用,使用JDK提供的工具排查具体线程ID的调用情况即可,可以参考CPU %100排查过程;
  • C++的话,使用gdb调试;
  • 没有专门的工具的话,使用strace命令即可,例如跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面:
    strace -o output.txt -T -tt -e trace=all -p 28979

健康范围

一般来说服务器上的CPU使用率在%40-%60左右即可,最高不超过80%,如果长期超过,考虑升级核心数。

故障排查——CPU使用率过高相关推荐

  1. linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题

    原标题:Linux系统下Java问题排查--cpu使用率过高或多线程锁问题 一个系统.特别是多线程并发的后台系统,在某些特定场景下,可能触发系统中的bug:导致cpu一直居高不下.进程hang了或处理 ...

  2. jstack排查cpu使用率过高

    jstack排查cpu使用率过高 步骤: 1.top命令找出最高占用的进程(command为java) 2.查看高负载进程下的高负载线程:top -Hp [PID] (或 ps -mp PID -o ...

  3. linux 内核空间占用cpu百分比过高,线上linux系统故障排查之一:CPU使用率过高

    摘自: 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 下面我们将一步步定位问题,详尽的介绍每一步骤的相关知识. 一.通过top命令定位占用cpu高的进程 执行top ...

  4. java cpu过高排查_CPU使用率过高,访问页面的速度越来越慢?今天我教你解决

    tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是因为部署的web程序的问题. 一.现象描述 在一次线上环境,前台访问页面的速度越来越慢,从浏览器F12中看到发出的请求都是 ...

  5. linux服务器 cpu使用率过高,服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  6. linux tomcat cpu占用高,排查tomcat服务器CPU使用率过高

    tomcat要运行依赖于JDK,tomcat服务器的CPU使用率过高,大多都是由于部署的web程序的问题. 一.征象形貌 在一次线上环境,前台接见页面的速率越来越慢,从浏览器F12中看到发出的请求都是 ...

  7. CPU使用率过高问题排查及Linux之top命令用法详解

    文章目录 问题 解决方案 top命令用法 top各输出参数含义 一.top前5行统计信息 二.进程信息 Top 1的用法 %CPU和us%的区别 问题 公司连续2天服务器告警CPU使用率过高问题,查看 ...

  8. CPU使用率过高如何排查问题

    CPU使用率过高如何排查问题 1.输入top指令,找到比较高的CPU使用率所对应的PID编号 1.输入ps H -eo pid,tid,%cpu | grep 进程PID 查看进程下面哪些线程TID使 ...

  9. window服务器cpu过高的排查_服务器CPU使用率过高排查与解决思路

    发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况 mpstat -P ALL 2 1 Linux 2.6.32-358.el6.x86_64 (linux- ...

  10. 解决排查 mongodb cpu使用率过高

    前言 通过 top 命令,可以看到 MongoDB 的 CPU 使用率过高,CPU 过高会导致数据读写.处理异常缓慢,还会出现被系统抹杀进程的风险,这个问题 99.9999% 的可能性是用户使用上不合 ...

最新文章

  1. NAT,Easy IP
  2. 数据库索引是什么?新华字典来帮你!
  3. python绘制饼状图带圆心距_matplotlib可视化饼图
  4. ACM试题 - 括号配对问题 - Java中字符串截取和定位问题
  5. nvm用标准sata ahci码_能者多劳!让NVMe固态硬盘做系统盘的同时,加速SATA数据盘...
  6. 安兔兔跑分可信吗_安兔兔安卓手机跑分性能榜公布:第一名实至名归?
  7. Android设计模式之——责任链模式
  8. r语言electricity数据集_R语言实战学习
  9. 光纤通道(FC: Fibre Channel)
  10. deian   授权用户 sudo权限
  11. 6.1儿童节特别礼物,mysql同步失败
  12. 南京GIS公司名单(持续更新中)
  13. caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist`
  14. 《Linux那些事儿之我是USB》我是U盘(15)冬天来了,春天还会远吗?(一)
  15. 软件测试论文参考文献
  16. Web开发者的实用网址
  17. 基于声音的击键信号识别
  18. 微信小程序--超简单贪吃蛇
  19. 滴滴出行为什么要推一个“全民拼车日”?
  20. 1行Python代码识别身份证信息,还能自动告警,YYDS

热门文章

  1. 地图标识符号大全_起名字大全男孩 男孩名字,起名字大全男孩
  2. FTP响应码与应答码
  3. 2023齐齐哈尔大学计算机考研信息汇总
  4. 揭示模式(Revealing Module)
  5. java图片黑白_java – 将图像转换为黑白图像
  6. The Oregon Trail 俄勒冈之旅
  7. 我的Python心路历程 第十期 (10.10 股票实战可视化历史趋势)
  8. Outlook设置规则的一点提示
  9. android 基带版本,扫盲贴:手机基带版本到底是什么???
  10. 北京大学计算机学院王锐,王锐-北京航空航天大学计算机学院