Linux实例内存使用率较高问题的排查与处理

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

问题现象

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

  • 系统运行卡顿、服务响应时长较长、应用性能下降等问题。

  • 通过ECS控制台查看实例内存使用率监控时,发现内存使用率过高(参考值:当前内存使用率> 80%,可认为内存使用率过高)。

  • 收到内存使用率超过设定阈值的告警信息。

可能原因

引起内存使用率过高的常见原因如下:

  • 异常的进程或服务占用大量内存,导致内存使用率过高。

  • 业务程序的业务流量过大,实例的物理内存不足以支撑业务开展所需的内存用量。

排查步骤

使用top查看实例内存使用率情况

您可以参考以下步骤,解决内存使用率过高的问题。

  1. 远程连接ECS实例。具体操作,请参见通过SSH的方式连接实例(Linux)

  2. 查找当前实例中占用内存过高的进程。

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

    top
    说明

    您可输入小写字母q退出top命令。

    按下M键以按照进程的内存使用率进行排序,回显信息示例如下,表明进程号为13183的进程占用最多的内存。

    image

    系统摘要信息及进程指标监控字段说明如下:

    系统摘要信息及进程指标监控字段说明

    系统摘要信息字段说明

    参数(行)

    说明

    top

    主机名、信息采样日期和时间点。

    • 当前时间

    • up:系统启动时间

    • user:当前登录用户数

    • load average:系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

    Tasks

    各种状态的进程的统计信息。

    • total:所有任务个数。

    • running:运行中进程个数。

    • sleeping:休眠中进程个数。

    • stopped:停止进程个数。

    • zombie:僵尸进程个数。

    %Cpu(s)

    cpu使用率情况。

    • us:用户空间占CPU的百分比

    • sy:内核空间占CPU的百分比

    • ni:用户进程空间改变过优先级

    • id:空闲CPU占用率

    • wa:等待输入输出的CPU时间百分比

    • hi:硬中断占用百分比

    • si:软中断占用百分比

    • st:steal time

    MiB Mem

    内存使用量统计。

    • total:物理内存总量。

    • free:空闲内存量

    • used:使用的内存量

    • buff/cache:用作内核缓存的内存量。

    MiB Swap

    交换分区使用量统计。

    • total:交换区内存总量。

    • free:空闲交换区总量。

    • used:使用的交换区总量。

    • avail Mem:缓冲的交换区总量。

    进程列表指标信息字段说明

    参数(列)

    说明

    PID

    进程的ID

    USER

    进程所属用户

    PR

    进程的优先级别,越小越优先被执行

    NI

    进程优先值

    VIRT

    进程占用的虚拟内存

    RES

    进程占用的物理内存

    SHR

    进程使用的共享内存

    S

    进程的状态。

    • R:运行状态。

    • S:休眠状态。

    • Z:僵死状态。

    • D:不可中断的睡眠状态

    • T:跟踪/停止状态

    %CPU

    进程占用CPU的使用率

    %MEM

    进程使用的物理内存和总内存的百分比

    TIME+

    该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

    COMMAND

    进程启动命令名称

处理内存使用率高的问题

内存占用较多问题的原因及解决方案如下。

问题现象

原因

解决方案

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

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

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

    警告

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

    • 通过sudo kill -15 <PID>来结束该进程。

    • top命令交互模式下结束进程,具体操作,请参见通过PID结束对应进程

  • 如果怀疑进程为恶意程序,您可以对其进行查杀,相关操作,请参见病毒查杀

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

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

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

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

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

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

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

如果实例出现内存资源瓶颈,您可以选择升级实例规格相关操作,请参见修改实例规格

相关文档