本文档适用于系统运维工程师,通过本文档可以根据 CPU/内存占用率异常增高导致的 Linux 云服务器卡顿有一个清晰的排查思路。

CPU 使用率

CPU 使用率查看

在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 Linux 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 — 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行后敲 q 键一次)。

#top
faq trouble slow linux 1

top 的全屏对话模式可分为 3 部分:系统信息栏、命令输入栏、进程列表栏。

系统信息栏

第一行( top)

  • 13:53:46 为系统当前时刻;

  • 59min 为系统启动后到现在的运作时间;

  • 2 users 为当前登录到系统的用户,更确切的说是登录到用户的终端数,同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;

  • load average 为当前系统负载的平均值,后面的三个值分别为 1 分钟前、5 分钟前、15 分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

第二行(Tasks)

  • 160 total 为当前系统进程总数;

  • 1 running 为当前运行中的进程数;

  • 159 sleeping 为当前处于等待状态中的进程数;

  • 0 stoped 为被停止的系统进程数;

  • 0 zombie 为被复原的进程数;

第三行(%Cpus)

分别表示了 CPU 当前的使用率;

第四行(Mem)

分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

第五行(Swap)

表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

内部命令提示栏

top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:

名称 说明

l -

关闭或开启第一部分第一行 top 信息的表示

t -

关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示

m -

关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示

N -

以 PID 的大小的顺序排列表示进程列表

P -

以 CPU 占用率大小的顺序排列进程列表

M -

以内存占用率大小的顺序排列进程列表

h -

显示帮助

n -

设置在进程列表所显示进程的数量

q -

退出 top

s -

改变画面更新周期

进程列表栏

以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式

名称 说明

PID

进程的 ID

USER

进程所有者

PR

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

NInice

VIRT

进程占用的虚拟内存

RES

进程占用的物理内存

SHR

进程使用的共享内存

S

进程的状态。S 表示休眠,R 表示正在运行,Z 表示僵死状态,N 表示该进程优先值为负数

%CPU

进程占用 CPU 的使用率

%MEM

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

TIME+

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

COMMAND

进程启动命令名称

CPU 占用高的分析过程

CPU 占用高通常表现为:

  • Terminal 操作无响应

  • 服务器运行的业务响应迟钝

    此时我们通过 top,查看 CPU 使用率,输入 P,以 CPU 占用率大小的顺序排列进程列表

    faq trouble slow linux 2
    1. 我们看到 CPU 占用率醉倒的 command 为 gzip,找到占用 CPU 过高的进程的 pid 为 9806

    2. 根据实际业务情况,判断该进程是否确实需要较高的 cpu 资源,如果异常,且无法关闭,可以进行如下操作

      1. 执行 kill -9 9806

      2. 再次执行 top

        faq trouble slow linux 3

        可以看到 gzip 进程已被 kill,cpu 使用率也恢复了正常。

内存使用率

内存使用率查看

  • free 命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。

    #free
                       total          used          free          shared     buff/cache   available
    Mem:               3880368        814004        2597788       18432     468576        2784716
    Swap:              4194300         0              4194300

    内容解释

    名称 说明

    Total

    内存总数,物理内存总数

    Used

    已经使用的内存数

    Free

    空闲的内存数

    Shared

    多个进程共享的内存总额

    buffers Buffer

    缓存内存数

    cached Page

    缓存内存数

    -buffers/cache

    应用使用内存数

    +buffers/cache

    应用可用内存数

    Swap

    交换分区,虚拟内存

    语法选项

    名称 说明

    -b

    以 Byte 为单位显示内存使用情况

    -k

    以 KB 为单位显示内存使用情况

    -m

    以 MB 为单位显示内存使用情况

    -o

    不显示缓冲区调节列

    -s<间隔秒数>

    持续观察内存使用状况

    -t

    显示内存总和列

    -V

    显示版本信息

  • ps 命令可以实时的显示各个进程的内存使用情况。可以使用 --sort 选项对进程进行排序,例如按 RSS 进行排序:

    #ps aux --sort -rss
    faq trouble slow linux 4
  • top 命令提供了实时的运行中的程序的资源使用统计。你可以根据内存的使用和大小来进行排序,进入到 top 之后,输入 M,以内存占用率大小的顺序排列进程列表。

    faq trouble slow linux 5

内存使用率高分析过程

操作系统级分析

  1. 通过 top 查看设备整体运行状况,进入 top 之后按 M

    faq trouble slow linux 6
  2. 我们看到占用内存最多的 commadn 为 dd 命令,我们根据业务需要,看下改进程是否确实需要较高的内存,如果不需要,或者想直接停掉改进程,可以执行 #kill -9 12483 命令。

  3. 再次执行 top 查看已经没有该进程

    faq trouble slow linux 7

进程分析

  1. 通过 ps 命令,可以使用 --sort 选项对进程进行排序,例如按 RSS 进行排序。

    faq trouble slow linux 8
  2. 我们看到占用内存最多的 command 为 dd 命令,我们根据业务需要,看下改进程是否确实需要较高的内存,如果不需要,或者想直接停掉改进程,可以执行 #kill -9 12903 命令。

  3. 再次执行 ps -aux --sort -rss 查看已经没有该进程。

    faq trouble slow linux 9