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
查看已经没有该进程。