# Linux云服务器CPU使用率高怎么办？
#### 问题描述
- 系统运行卡顿、服务响应时长较长、应用性能下降等问题。
- 通过ECS控制台查看实例CPU使用率监控时，发现CPU使用率过高（参考值：当前CPU 使用率\> 80%，可认为CPU使用率过高）。
- 收到CPU使用率超过设定阈值的告警信息。
 
#### 排查方法
本文相关操作命令以CentOS 7.9 64位操作系统为例。其它版本的Linux操作系统命令可能有所差异，具体情况请参阅相应操作系统的官方文档。
1. 使用top命令排查CPU占用高的具体进程。 
   1. 登录弹性云服务器，具体操作，请参见[Linux ECS登录方法概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   2. 执行如下命令查看当前系统的运行状态。 **top**
      系统回显样例如下：
      图1操作结果   
      ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000002372180037.png "点击放大")
      查看显示结果。
      - 命令回显第一行：
        ```
        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\>
         
        
   
   
   
   
2. 使用vmstat命令查看系统资源使用信息。 
   vmstat（Virtual Memory Statistics）是用于报告虚拟内存统计信息的命令，可以使用该命令，从系统维度查看操作系统的虚拟内存、进程、CPU等指标信息。
   - vmstat命令的使用格式如下： **vmstat \[-n\] \[delay \[count\]\]**
     表1**常用参数说明** 
     | **参数选项**   | **说明**                                                    |
     |:---|:---|
     | -n          | 只在开始时显示一次各字段名称。                                             |
     | \[delay\] | 刷新时间间隔。如果不指定，只显示一条结果。                                        |
     | \[count\]   | 刷新次数。如果不指定刷新次数，但指定了刷新时间间隔，刷新操作不会自动停止，您需要按Ctrl+C键退出vmstat程序。 |
        
     
   
   - vmstat命令使用示例 执行如下命令，使用vmstat每1秒统计一次各进程的CPU使用情况，连续统计4次。
     **vmstat -n 1 4**
     图2操作结果   
     ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000002372100169.png "点击放大")
     回显结果主要字段说明如下。
     - r：表示系统中CPU等待处理的线程。一个CPU每次只能处理一个线程，所以该数值越大，通常表示系统运行越慢。
     
     - b：表示正在等待 I/O 完成，被阻塞的进程数。
     
     - us：用户模式消耗的CPU时间百分比。该值较高时，说明用户进程消耗的CPU时间比较多。如果该值长期超过50%，则需要对程序算法或代码等进行优化。
     
     - sy：内核模式消耗的CPU时间百分比。
     
     - wa：I/O等待消耗的CPU时间百分比。该值较高时，说明IO等待比较严重，这可能是磁盘大量作随机访问造成的，也可能是磁盘性能出现了瓶颈。
     
     - id：处于空闲状态的CPU时间百分比。如果该值持续为0，同时sy是us的两倍，则通常说明系统面临CPU资源短缺。
      
   
   
   
   
3. 常见CPU占用较多问题的原因及解决方案。 
   表2常见CPU占用较多问题的原因及解决方案 
   | **问题现象**                                | **原因**                                                                                                                                        | **解决方案**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|:---|
   | 异常程序或进程长时间占用大量CPU资源，导致CPU使用率和负载较高。      | 该程序为异常程序或进程，运行时占用过多CPU资源。                                                                                                                     | - 通过在top工具定位到占用CPU资源较多的程序的PID，并通过如下方式结束进程。 注意： 在您结束进程前，请务必确保您了解该进程的相关信息，避免因误操作导致您的业务中断。     - 通过kill -15 \<进程PID\>来结束该进程。    - 如果怀疑进程为恶意程序，您可以对其进行查杀，相关操作，请参见[病毒查杀](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0583.html)。   |
   | 正常用户程序或进程长时间占用大量CPU资源。导致CPU使用率和负载较高。    | 该程序为正常业务程序或进程，运行时占用过多CPU资源。                                                                                                                   | 如果实例出现CPU性能瓶颈，您可以结合实际情况选择相应的处理策略。 - 升级实例规格**。** 相关操作。请参见[变更实例规格](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771092.html)。  - 优化业务程序。                                                                                                                                                                                                                         |
   | 单个业务程序或进程偶发CPU使用率及负载较高，但持续时间较短，且发生频率较低。 | 业务程序需要优化，以解决特殊业务场景（加解密，高并发等）触发的CPU资源占用过高问题。                                                                                                   | 优化业务程序。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | top显示CPU使用率不高，但云服务器基础监控中CPU使用率很高。       | 系统被入侵导致top结果不可信。                                                                                                                              | 建议您进行病毒查杀，相关操作，请参见[病毒查杀](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0583.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | kswapd0进程持续占用较高CPU                      | kswapd0是虚拟内存管理中负责换页的进程，当ECS实例物理内存不足时，kswapd0会执行换页操作，换页操作会消耗大量的CPU资源。                                                                          | 可以将问题转向内存不足的原因来排查。详见内存使用率高问题排查。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | CPU使用率低但负载很高                            | 系统内存在大量D状态进程，vmstat回显中b列。 可通过如下命令查看D状态进程信息： **ps -elf \| grep " D" \| grep -v grep** | 处于D状态的进程无法终止，也无法自行退出，只能通过恢复其依赖的资源或者重启系统来解决。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      
   
   
 
#### 相关文档
如果是偶现的CPU冲高，无法直接观测，则需要安装atop工具定位，详见[安装atop](https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0328.html#section1)。
