Linux 云服务器系统卡顿
本文档适用于系统运维工程师,通过本文档可以根据 CPU/内存占用率异常增高导致的 Linux 云服务器卡顿有一个清晰的排查思路。
CPU 使用率
CPU 使用率查看
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 Linux 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 — 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行后敲 q 键一次)。
#top
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 占用率大小的顺序排列进程列表
-
我们看到 CPU 占用率醉倒的 command 为 gzip,找到占用 CPU 过高的进程的 pid 为 9806
-
根据实际业务情况,判断该进程是否确实需要较高的 cpu 资源,如果异常,且无法关闭,可以进行如下操作
-
执行
kill -9 9806
-
再次执行 top
可以看到 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
-
top 命令提供了实时的运行中的程序的资源使用统计。你可以根据内存的使用和大小来进行排序,进入到 top 之后,输入 M,以内存占用率大小的顺序排列进程列表。
内存使用率高分析过程
操作系统级分析
-
通过
top
查看设备整体运行状况,进入 top 之后按 M -
我们看到占用内存最多的 commadn 为 dd 命令,我们根据业务需要,看下改进程是否确实需要较高的内存,如果不需要,或者想直接停掉改进程,可以执行
#kill -9 12483
命令。 -
再次执行
top
查看已经没有该进程
进程分析
-
通过 ps 命令,可以使用
--sort
选项对进程进行排序,例如按 RSS 进行排序。 -
我们看到占用内存最多的 command 为
dd
命令,我们根据业务需要,看下改进程是否确实需要较高的内存,如果不需要,或者想直接停掉改进程,可以执行#kill -9 12903
命令。 -
再次执行
ps -aux --sort -rss
查看已经没有该进程。