# Linux云服务器内存使用率高怎么办？
#### 问题描述
使用Linux ECS实例时，出现如下现象：
- 系统运行卡顿、服务响应时长较长、应用性能下降等问题。
- 通过ECS控制台查看实例内存使用率监控时，发现内存使用率过高（参考值：当前内存使用率\> 80%，可认为内存使用率过高）。
- 收到内存使用率超过设定阈值的告警信息。
 
#### 排查方法
本文相关操作命令以CentOS 7.9 64位操作系统为例。其它版本的Linux操作系统命令可能有所差异，具体情况请参阅相应操作系统的官方文档。
1. 使用free命令查看内存总体使用情况。 
   1. 登录弹性云服务器，具体操作，请参见[Linux ECS登录方法概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   2. 执行如下命令，查看内存总体使用情况： **free --h**
      回显信息示例如下：
      图1操作结果   
      ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000002338108054.png "点击放大")
      Mem和Swap行分别表示服务器物理内存和交换空间的使用情况。
      表1参数说明 
      | **物理内存(Mem)部分** **：**                                                                                                                                                                                                                                                                             | **交换空间(Swap)部分** **：**                                                                                                 |
      |:---|:---|
      | total：系统总物理内存大小 used：已使用的物理内存 free：完全空闲的物理内存 shared：被tmpfs等共享的内存 buff/cache：内核缓冲区(buffers)和页缓存(cache)占用的内存总和 available：估算的可用内存，约等于free+cache | total：交换分区总大小（如果未配置Swap，则显示为0） used：已使用的交换空间 free：空闲的交换空间 |
         
      
   
   
   
   
2. 使用top查看实例内存使用率情况。 
   1. 登录弹性云服务器，具体操作，请参见[Linux ECS登录方法概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   2. 查找当前实例中占用内存过高的进程。 执行如下命令，从进程维度查看CPU、内存等资源的使用情况。
      **top**
      按下M键以按照进程的内存使用率进行排序，回显信息示例如下：
      表明进程号为1015的进程占用最多的内存。
      图2操作结果   
      ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000002372106133.png "点击放大") 
   
   
   
   
3. 处理内存使用率高的问题。 
   表2内存占用较多问题的原因及解决方案 
   | **问题现象**                                        | **原因**                                                                                               | **解决方案**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   |:---|:---|:---|
   | 单个用户程序或进程长时间占用大量内存                             | 异常程序，进程占用过多内存。                                                                                        | - 通过在top工具定位到占用内存资源较多的程序的PID，并通过如下方式结束进程。 注意： 在您结束进程前，请务必确保您了解该进程的相关信息，避免因误操作导致您的业务中断。     - 通过**sudo kill -15 \<PID\>**来结束该进程。    - 如果怀疑进程为恶意程序，您可以对其进行查杀，相关操作，请参见[病毒查杀](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0583.html)。   |
   | 正常用户程序或进程长时间占用大量内存资源。导致内存使用率较高。                | 该程序为正常业务程序或进程，运行时占用过多内存资源。                                                                          | 如果实例出现内存资源瓶颈，您可以结合实际情况选择相应的处理策略。 - 升级实例规格**。** 相关操作。请参见[变更实例规格](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771092.html)。  - 优化业务程序。                                                                                                                                                                                                                                         |
   | 单个程序或进程偶发过高内存占用，但持续时间较短，且发生频率较低。               | 程序或进程中存在瞬时流量或定时任务，导致短时间内消耗大量内存。                                                                      | 升级实例规格，相关操作，请参见[变更实例规格](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771092.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 没有单个程序或进程占用大量内存资源，但整体内存使用率较高                     | 当前实例的服务正常运行所需内存资源大于实例的内存规格。 如php业务，php线程数太多可能导致内存不足。                    | 升级实例规格，相关操作，请参见[变更实例规格](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771092.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | free命令查看系统内存，发现free内存不足，且buffers和cached大量占用内存。 | 业务上有大量文件读写操作，内核持续将数据存入cached。 Web服务器、数据库等长期运行的服务会积累大量缓存（如静态文件、查询结果） | 一般来说无需处理，当应用程序需要内存时，内核会自动释放buffers/cached，优先保障应用运行。 如果对业务有影响，可以手动释放：参见[Linux操作系统云服务器中buffer和cache占用内存怎么办？](https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0336.html)。                                                                                                                                                                                                                                                                                                                                               |
      
   
   
 
#### 相关文档
如果是偶现的内存冲高，无法直接观测，则需要安装atop工具定位，详见[安装atop](https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0328.html#section1)。
