文档首页/ 弹性云服务器 ECS/ 常见问题/ ECS卡顿(Linux)/ Linux云服务器内存使用率高怎么办?
更新时间:2025-08-29 GMT+08:00
分享

Linux云服务器内存使用率高怎么办?

问题描述

使用Linux ECS实例时,出现如下现象:

  • 系统运行卡顿、服务响应时长较长、应用性能下降等问题。
  • 通过ECS控制台查看实例内存使用率监控时,发现内存使用率过高(参考值:当前内存使用率> 80%,可认为内存使用率过高)。
  • 收到内存使用率超过设定阈值的告警信息。

排查方法

本文相关操作命令以CentOS 7.9 64位操作系统为例。其它版本的Linux操作系统命令可能有所差异,具体情况请参阅相应操作系统的官方文档。

  1. 使用free命令查看内存总体使用情况。

    1. 登录弹性云服务器,具体操作,请参见Linux ECS登录方法概述
    2. 执行如下命令,查看内存总体使用情况:

      free –h

      回显信息示例如下:

      图1 操作结果

      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登录方法概述
    2. 查找当前实例中占用内存过高的进程。

      执行如下命令,从进程维度查看CPU、内存等资源的使用情况。

      top

      按下M键以按照进程的内存使用率进行排序,回显信息示例如下:

      表明进程号为1015的进程占用最多的内存。

      图2 操作结果

  3. 处理内存使用率高的问题。

    表2 内存占用较多问题的原因及解决方案

    问题现象

    原因

    解决方案

    单个用户程序或进程长时间占用大量内存

    异常程序,进程占用过多内存。

    • 通过在top工具定位到占用内存资源较多的程序的PID,并通过如下方式结束进程。
      注意:

      在您结束进程前,请务必确保您了解该进程的相关信息,避免因误操作导致您的业务中断。

    • 通过sudo kill -15 <PID>来结束该进程。
    • 如果怀疑进程为恶意程序,您可以对其进行查杀,相关操作,请参见病毒查杀

    正常用户程序或进程长时间占用大量内存资源。导致内存使用率较高。

    该程序为正常业务程序或进程,运行时占用过多内存资源。

    如果实例出现内存资源瓶颈,您可以结合实际情况选择相应的处理策略。

    • 升级实例规格相关操作。请参见变更实例规格
    • 优化业务程序。

    单个程序或进程偶发过高内存占用,但持续时间较短,且发生频率较低。

    程序或进程中存在瞬时流量或定时任务,导致短时间内消耗大量内存。

    升级实例规格,相关操作,请参见变更实例规格

    没有单个程序或进程占用大量内存资源,但整体内存使用率较高

    当前实例的服务正常运行所需内存资源大于实例的内存规格。

    如php业务,php线程数太多可能导致内存不足。

    升级实例规格,相关操作,请参见变更实例规格

    free命令查看系统内存,发现free内存不足,且buffers和cached大量占用内存。

    业务上有大量文件读写操作,内核持续将数据存入cached。

    Web服务器、数据库等长期运行的服务会积累大量缓存(如静态文件、查询结果)

    一般来说无需处理,当应用程序需要内存时,内核会自动释放buffers/cached,优先保障应用运行。

    如果对业务有影响,可以手动释放:参见Linux操作系统云服务器中buffer和cache占用内存怎么办?

相关文档

如果是偶现的内存冲高,无法直接观测,则需要安装atop工具定位,详见安装atop

相关文档