top命令用于监控Linux上用户进程以及系统资源的使用情况,它是网管工具箱中最实用的工具之一。top命令已经预装到Linux系统中了,它有一定的交互功能,你可以通过它浏览进程列表、关闭进程等操作
概述
top命令可以输出正在运行中的进程列表,并且每隔几秒钟自动更新列表中各个进程的状态
默认情况下,列表是按照CPU的使用率由高到低来排序的,所以可以很轻松的观察到哪个用户的哪个进程占用了最多的系统资源,默认排序列是可以修改的,这个在后面的段落中会说到。
我们只需要在终端输入top
并回车,就进入了命令行模式,输出下图所示的总览信息以及进程列表,按 Q
或者 Ctrl + Z
退出命令行模式
上图中,上半部分是系统的总览信息,包括:系统信息、内存使用、任务信息、CPU使用、平均负载、进程列表
系统信息
如上图所示,在屏幕的左上角的顶部的红框部分,显示了当前时间、系统运行时间(系统已经运行了多久)以及用户会话数(当前登录了几个会话)
由图可知,当前时间是 21:06:40
,系统已经连续运行了3天2小时21分钟,当前有有两个会话登录了系统
在终端中输入 who
并回车, 查看当前活跃会话,具体输出如下:
[root@ecs-centos-7 ~]# who
root pts/0 2020-08-11 23:45 (112.97.60.180)
root pts/1 2020-08-12 00:24 (112.97.60.180)`
内存使用
图中红框区域是关于系统内存使用情况, Mem 和 Swap 分别表示物理内存和交换空间
内存 | total | free | used | buff/cache |
---|---|---|---|---|
Mem | 总物理内存 | 空闲内存 | 已经使用的内存 | 内核缓冲区以及页缓存 |
Swap | 总的交换空间 | 空闲交换空间 | 已经使用的交换空间 | 空 |
任务信息
任务区域展示的是系统中进程的统计信息,下面是各个参数的说明
total: 总的进程数
running: 正在运行的进程数
sleeping: 睡眠中的进程数
stopped: 已经停止的进程数
zombile: 僵尸进程数
上图中,总共有82个进程,2个正在运行,80个处于睡眠状态,没有已经停止的进程,也没有僵尸进程
CPU使用
CPU百分比部分显示了在各种任务上花费的CPU时间的百分比
us: CPU再用户空间中执行进程花费的时间
sy: CPU再内核空间中运行花费的时间
ni: nice值,Linux系统使用 nice值决定进程优先级,值越大进程优先级越低,值越小优先级越高
id:CPU保持空闲的时间
wa: CPU等待IO完成花费的时间
hi: CPU处理硬中断花费的时间
si: CPU处理软中断花费的时间
st: 因CPU在其他虚拟机上繁忙而无法执行当前任务所浪费的时间
平均负载
上图中红框区域是系统平均负载,分别表示一分钟、五分钟、十五分钟的平均负载,负载是系统执行计算工作量的度量
在单核系统中,假如平均负载是 0.6,表示系统处于 60% 负荷的状态
平均负载是 1,表示系统正处于满负荷状态,这个时候如果再增加哪怕一点点的负荷就可以使系统过载
当平均负载达到 2 时,表示其过载超过其负荷的 100%
在多核系统上,CPU核数就是系统负载的上限,比如:一台 4 核机器上负载上限就是 4
进程列表
下图中红框区域是系统中的进程列表
进程列表列说明:
- PID
进程ID,标识每个进程的唯一ID
- USER
进程是由哪个用户启动的
- PR、NI
PR字段从内核的角度显示进程调度优先级
NI 字段是前面介绍的进程nice值,会影响进程的优先级
- VIRT、RES、SHR、 %MEM
这几个参数都是和进程内存消耗相关
VIRT
是进程内存占用的总大小,包括程序代码,进程中存储数据以及被换出到磁盘中的内存页
RES 是进程占用的物理内存大小
%MEM 是进程占用物理内存的百分比,可以通过下面的公式计算得到
%MEM = 实际的物理内存大小 / RES大小
SHR 是进程间共享内存的大小
- S
进程状态,前面 任务信息 段落提到了进程的几种状态,分别是:运行状态、睡眠状态、停止状态、僵尸状态
- %CPU
进程占用的CPU百分比
- TIME+
进程从启动到当前为止占用CPU的总时间,能精确到0.01秒
- COMMAND
显示进程名称
启动、关闭 top 命令行
在终端中输入 top
按回车键,即可启动 top 的命令行,
按 Q
键或 者Ctrl + Z
键可退出命令行模式
还有一种退出方式,在终端中输入 top -n 5
命令,待进入命令行,更新5次数据之后会自动退出命令行
显示指定用户进程
终端中输入 top -u 用户名
或者 top U 用户名
就可以显示指定用户的进程列表,下面的例子是显示 root 用户的进程列表, 具体如下所示:
[root@ecs-centos-7 ~]# top -u root
top - 00:36:50 up 4 days, 5:51, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 3.1 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130088 free, 358548 used, 392908 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370264 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:02.77 kworker/u4:0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
显示指定进程ID的进程
终端上输入 top -p 进程ID
可以显示指定进程ID的进程,下面的例子显示进程ID为 1 的进程,具体输出如下所示:
[root@ecs-centos-7 ~]# top -p 1
top - 00:42:50 up 4 days, 5:57, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130460 free, 358172 used, 392912 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370640 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 systemd
终端上输入 top -p 进程ID1,进程ID2,进程ID3
可以显示 进程ID1,进程ID2,进程ID3 这三个进程,具体输出如下所示:
[root@ecs-centos-7 ~]# top -p 1,2,4
top - 00:43:50 up 4 days, 5:58, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 3 total, 0 running, 3 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130576 free, 358048 used, 392920 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370760 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
显示完整命令
有时候需要查看 COMMAND 列的完整命令, top -c
命令可以达到目的
[root@ecs-centos-7 ~]# top -c
top - 00:54:32 up 4 days, 6:09, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130072 free, 358532 used, 392940 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370272 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 /usr/lib/systemd/systemd --switched-root --system --deserialize +
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kthreadd]
从上面的例子中可以看出,进程ID为1的进程 COMMAND 列显示了完整的命令
设置刷新频率
进入top的命令行模式后,默认是3s左右会刷新一次,我们可以使用 top -d 刷新的秒数
来设置刷新的频率,比如 top -d 5
命令是设置每5s刷新一次
多核CPU监控
在top命令行模式下,按键盘数字 1 ,可以监控每个逻辑CPU的信息
上图中绿色框里是查询逻辑CPU的数量,红色框是每一个逻辑 CPU 信息
从图中可知,当前机器有 2 个逻辑CPU,%CPU0 和 %CPU1 分别是两个逻辑 CPU 的信息
进程排序
默认是按照 %CPU 列 也即CPU的百分比占用来排序的,可以通过 Shift + >
或 Shift + <
向右或向左改变排序的列
在上面的动画中,进入top命令行之后,默认是以 %CPU 列排序的,按一次 Shift + >
键右移排序的列,新的排序列变成了 %MEM