Linux云服务器CPU使用率高怎么办?
问题描述
- 系统运行卡顿、服务响应时长较长、应用性能下降等问题。
- 通过ECS控制台查看实例CPU使用率监控时,发现CPU使用率过高(参考值:当前CPU 使用率> 80%,可认为CPU使用率过高)。
- 收到CPU使用率超过设定阈值的告警信息。
排查方法
本文相关操作命令以CentOS 7.9 64位操作系统为例。其它版本的Linux操作系统命令可能有所差异,具体情况请参阅相应操作系统的官方文档。
- 使用top命令排查CPU占用高的具体进程。
- 登录弹性云服务器,具体操作,请参见Linux ECS登录方法概述。
- 执行如下命令查看当前系统的运行状态。
系统回显样例如下:
图1 操作结果查看显示结果。- 命令回显第一行:
14:55:18 up 1 day, 35 min, 1 user, load average: 0.00, 0.01, 0.05
表示系统当前时间为14:55:18该云服务器已运行1天,当前共有1个用户登录, 最近1分钟、最近5分钟和最近15分钟的CPU平均负载分别为0.00、0.01、0.05。
- 命令回显第二行为进程统计:
Tasks: 106 total, 1 running, 105 sleeping, 0 stopped, 0 zombie
表示当前系统内总进程数为106个,其中:1个在运行(running),105个睡眠状态(sleeping) ,0个已停止(stopped)进程,0个僵尸进程(zombie)
- 命令回显第三行为CPU总体使用情况:
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
每个字段含义如下:
- us:用户态进程占用CPU百分比(应用程序占用)。
- sy:内核占用CPU百分比(系统调用)。
- id:空闲CPU百分比(越高表示系统越空闲)。
- wa:等待I/O操作的CPU时间(较高时需排查磁盘性能)。
- hi/si:硬件/软件中断占用。
- st:虚拟化环境中被宿主机占用的CPU时间。
- 命令回显第四、第五行为内存使用情况。
- 回显最下方为各进程的资源占用情况。
- 输入大写P键,可以对CPU使用率进行倒序排列,方便定位系统中占用CPU较高的进程。
- 输入大写M键,使用内存使用情况进行排序。
- 如果有多核CPU,数字键1可以显示每核CPU的负载状况。
- 输入小写“q”退出top界面。
- 左边第一列为进程PID,记录下占用CPU高的进程PID,使用如下命令查看该进程的详细命令行信息:
- ps –elf | grep <进程PID>
- 命令回显第一行:
- 使用vmstat命令查看系统资源使用信息。
vmstat(Virtual Memory Statistics)是用于报告虚拟内存统计信息的命令,可以使用该命令,从系统维度查看操作系统的虚拟内存、进程、CPU等指标信息。
- vmstat命令的使用格式如下:
表1 常用参数说明 参数选项
说明
-n
只在开始时显示一次各字段名称。
[delay]
刷新时间间隔。如果不指定,只显示一条结果。
[count]
刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,刷新操作不会自动停止,您需要按Ctrl+C键退出vmstat程序。
- vmstat命令使用示例
执行如下命令,使用vmstat每1秒统计一次各进程的CPU使用情况,连续统计4次。
vmstat -n 1 4
图2 操作结果回显结果主要字段说明如下。
- r:表示系统中CPU等待处理的线程。一个CPU每次只能处理一个线程,所以该数值越大,通常表示系统运行越慢。
- b:表示正在等待 I/O 完成,被阻塞的进程数。
- us:用户模式消耗的CPU时间百分比。该值较高时,说明用户进程消耗的CPU时间比较多。如果该值长期超过50%,则需要对程序算法或代码等进行优化。
- sy:内核模式消耗的CPU时间百分比。
- wa:I/O等待消耗的CPU时间百分比。该值较高时,说明IO等待比较严重,这可能是磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。
- id:处于空闲状态的CPU时间百分比。如果该值持续为0,同时sy是us的两倍,则通常说明系统面临CPU资源短缺。
- vmstat命令的使用格式如下:
- 常见CPU占用较多问题的原因及解决方案。
表2 常见CPU占用较多问题的原因及解决方案 问题现象
原因
解决方案
异常程序或进程长时间占用大量CPU资源,导致CPU使用率和负载较高。
该程序为异常程序或进程,运行时占用过多CPU资源。
- 通过在top工具定位到占用CPU资源较多的程序的PID,并通过如下方式结束进程。
注意:
在您结束进程前,请务必确保您了解该进程的相关信息,避免因误操作导致您的业务中断。
- 通过kill -15 <进程PID>来结束该进程。
- 如果怀疑进程为恶意程序,您可以对其进行查杀,相关操作,请参见病毒查杀。
正常用户程序或进程长时间占用大量CPU资源。导致CPU使用率和负载较高。
该程序为正常业务程序或进程,运行时占用过多CPU资源。
如果实例出现CPU性能瓶颈,您可以结合实际情况选择相应的处理策略。
- 升级实例规格。相关操作。请参见变更实例规格。
- 优化业务程序。
单个业务程序或进程偶发CPU使用率及负载较高,但持续时间较短,且发生频率较低。
业务程序需要优化,以解决特殊业务场景(加解密,高并发等)触发的CPU资源占用过高问题。
优化业务程序。
top显示CPU使用率不高,但云服务器基础监控中CPU使用率很高。
系统被入侵导致top结果不可信。
建议您进行病毒查杀,相关操作,请参见病毒查杀。
kswapd0进程持续占用较高CPU
kswapd0是虚拟内存管理中负责换页的进程,当ECS实例物理内存不足时,kswapd0会执行换页操作,换页操作会消耗大量的CPU资源。
可以将问题转向内存不足的原因来排查。详见内存使用率高问题排查。
CPU使用率低但负载很高
系统内存在大量D状态进程,vmstat回显中b列。
可通过如下命令查看D状态进程信息:
ps -elf | grep " D" | grep -v grep
处于D状态的进程无法终止,也无法自行退出,只能通过恢复其依赖的资源或者重启系统来解决。
- 通过在top工具定位到占用CPU资源较多的程序的PID,并通过如下方式结束进程。
相关文档
如果是偶现的CPU冲高,无法直接观测,则需要安装atop工具定位,详见安装atop。