写在前面
学习Linux系统, 首先就要了解其系统的基本调用接口, 这里主要就是Shell命令了, top
就是其中几个最重要也最常用的命令之一, 下面讲讲在Archlinux(x86_64)
上使用top
命令的一些参数与详解. 参考了man top
1以及一些博客文章2.
基本界面
top - 04:37:41 up 2 min, 1 user, load average: 0.75, 0.65, 0.28
Tasks: 108 total, 1 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 1.2 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 2913.3 total, 2623.1 free, 92.4 used, 197.8 buff/cache
MiB Swap: 1907.0 total, 1907.0 free, 0.0 used. 2605.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
382 root 20 0 11272 3616 2956 R 2.0 0.1 0:00.31 top
11 root 20 0 0 0 0 I 0.7 0.0 0:00.89 kworker/u6:1-events_unbound
26 root 20 0 0 0 0 I 0.7 0.0 0:00.88 kworker/1:0-events
53 root 20 0 0 0 0 I 0.7 0.0 0:01.25 kworker/2:1-events
20 root 20 0 0 0 0 I 0.3 0.0 0:01.31 kworker/0:1-events
138 root 0 -20 0 0 0 I 0.3 0.0 0:00.23 kworker/2:1H-events_highpri
1 root 20 0 18492 11364 8920 S 0.0 0.4 0:06.86 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
...
总览
1) Summary Area; 总览区域 2) Fields/Columns Header; 字段/列标题 3) Task Area. 任务区域.
前面5行
top - 04:37:41 up 2 min, 1 user, load average: 0.75, 0.65, 0.28
Tasks: 108 total, 1 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 1.2 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 2913.3 total, 2623.1 free, 92.4 used, 197.8 buff/cache
MiB Swap: 1907.0 total, 1907.0 free, 0.0 used. 2605.7 avail Mem
这里算是对系统信息的一个总览, 下面逐行分析.
行数 | 内容 | 具体解释 |
---|---|---|
1 | 任务队列信息 | 系统当前时间, up后为系统启动时间, 用户数量, 系统在之前 1 分钟、5 分钟、15 分钟的平均负载 |
2 | 进程信息 | 进程总数, 运行/休眠/停止/僵尸进程数 |
3 | CPU信息 | 参见下边描述 |
4 | 物理内存信息 | (默认单位MiB)物理内存总量, 空闲的物理内存量, 已使用的物理内存量, 作为缓存的物理内存量 |
5 | 交换内存分区信息 | (默认单位MiB)交换分区(虚拟内存)总量, 空闲的虚拟内存量, 已使用的虚拟内存量, 在不进行交换的情况下启动新应用程序可用的物理内存的估值 |
显示名称 | man page解释 | 中文解释 |
---|---|---|
us, user | time running un-niced user processes | 未改变优先级的用户进程的CPU时间占比 |
sy, system | time running kernel processes | (内核态)系统进程CPU时间占比占用时间比 |
ni, nice | time running niced user processes | 改变过优先级的用户进程的CPU时间占比 |
id, idle | time spent in the kernel idle handler | 空闲内核的CPU时间占比占用率 |
wa, IO-wait | time waiting for I/O completion | 等待输入输出(i/o)完成进程的CPU时间占比 |
hi | time spent servicing hardware interrupts | 硬中断请求服务的CPU时间占比 |
si | time spent servicing software interrupts | 软中断请求服务的CPU时间占比 |
st | time stolen from this vm by the hypervisor | 虚拟时间百分比 (存在虚拟机时等待实际CPU的时间占比) |
%MEM - simply RES divided by total physical memory
CODE - the `pgms' portion of quadrant 3
DATA - the entire quadrant 1 portion of VIRT plus all
explicit mmap file-backed pages of quadrant 3
RES - anything occupying physical memory which, beginning with
Linux-4.5, is the sum of the following three fields:
RSan - quadrant 1 pages, which include any
former quadrant 3 pages if modified
RSfd - quadrant 3 and quadrant 4 pages
RSsh - quadrant 2 pages
RSlk - subset of RES which cannot be swapped out (any quadrant)
SHR - subset of RES (excludes 1, includes all 2 & 4, some 3)
SWAP - potentially any quadrant except 4
USED - simply the sum of RES and SWAP
VIRT - everything in-use and/or reserved (all quadrants)
VIRT -- 虚拟内存大小 (KiB)
任务使用的虚拟内存总量。它包括所有代码、数据和共享库,以及已换出的页面和已映射但未使用的页面。
- PID:进程的 ID。
- USER:该进程所属的用户。
- PR:优先级,数值越小优先级越高。
- NI:优先级,数值越小、优先级越高。
- VIRT:该进程使用的虚拟内存的大小,单位为 KB。
- RES:该进程使用的物理内存的大小,单位为 KB。
- SHR:共享内存大小,单位为 KB。
- S:进程状态。
- %CPU:该进程占用 CPU 的百分比。
- %MEM:该进程占用内存的百分比。
- TIME+:该进程共占用的 CPU 时间。
- COMMAND:进程的命令名。
命令行选项+参数
基本选项
选项 | 参数 | 解释 |
---|---|---|
-hv |
- |
帮助/版本信息 |
-b |
cEeHiOSs1 |
Batch-Mode, 使用批处理模式输出, 一般和”-n”选项合用, 用于把 top 命令结果重定向到文件或其他程序中 |
-d |
秒数 | 指定top 每隔多少秒更新一次信息(默认3 秒), 参数格式为ss.t (秒数.十分位) |
-u|U |
用户名 | 指定用户名显示系统信息, -u 选项匹配有效的用户名,-U 选项匹配任何用户名 |
-n |
迭代次数 | 指定top 的执行次数 |
-p |
进程ID(PIDs) | 查看指定进程的系统信息, 可以添加多个PID, 格式为 -pN1 -pN2 ... 或-pN1,N2,N3,... |
-o |
域名称 | 所指定的域将被排序 |
-w |
宽度 | 指定top 命令的输出宽度 |
-e |
k|m|g|t|p |
任务内存格式化显示(参数分别为千|兆|吉|太|拍 字节显示), 也可以在交互模式输入 e 切换 |
-E |
k|m|g|t|p|e |
任务总计内存格式化, 单位同上(指界面最上面的总计内存), 也可以在交互模式输入 E 切换 |
补充:
- 内存换算公式: KiB = kibibyte = 1024 bytes MiB = mebibyte = 1024 KiB = 1,048,576 bytes GiB = gibibyte = 1024 MiB = 1,073,741,824 bytes TiB = tebibyte = 1024 GiB = 1,099,511,627,776 bytes PiB = pebibyte = 1024 TiB = 1,125,899,906,842,624 bytes EiB = exbibyte = 1024 PiB = 1,152,921,504,606,846,976 bytes
一些示例
$ top -h
procps-ng 3.3.17
Usage:
top -hv | -bcEeHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
模式选项
下面的选项均没有参数, 仅仅触发不同的top
模式.
选项 | 解释 |
---|---|
-H |
触发线程模式, 指示top 显示单个线程, 如果没有这个选项, 则将显示每个进程中所有线程的总和 |
-s |
触发安全模式运行top , 避免交互模式出错 |
-S |
触发累积时间模式,列出每一个进程以及其子进程(已死亡)占用的CPU时间 |
-c |
触发命令行/程序名模式, 打开top |
-1 |
触发单一CPU状态模式, -2 可以表示 |
-i |
触发空闲进程切换模式, 开启top 并显示最后一次更新以来未使用任何CPU 的任务 |
快捷键
按键 | 事件 | 备注 |
---|---|---|
? | h |
显示交互模式帮助信息 | |
p |
(默认)按照CPU占用率排序 | 大小写均可 |
q|<C-c> |
退出top 命令的交互式界面 |
|
<C-z> |
挂起top 命令 |
|
fg |
恢复挂起的top 命令执行 |
fg 在终端命令行执行 |
k |
杀死指定的PID 对应的进程 |
内存查看
free
:
小结
重在尝试, 还是要自己试一下才能记住常用的命令.