一、功能
top 命令经常用来监控 linux 的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
二、使用方式
top [-d number] | top [-bnp]
参数解释:
- -d:number 代表秒数,表示 top 命令显示的页面更新一次的间隔,默认是5秒。
- -b:以批次的方式执行 top。
- -n:与 -b 配合使用,表示需要进行几次 top 命令的输出结果。
- -p:指定特定的 pid 进程号进行观察。
在 top 命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):
- ?:显示在 top 当中可以输入的命令。
- P:以 CPU 的使用资源排序显示。
- M:以内存的使用资源排序显示。
- N:以 pid 排序显示。
- T:由进程使用的时间累计排序显示。
- k:给某一个 pid 一个信号,可以用来杀死进程。
- r:给某个 pid 重新定制一个 nice 值(即优先级)。
- q:退出 top(用 ctrl + c 也可以退出 top)。
三、top 各输出参数含义
下面是使用top命令来进行性能检测的截图:
图一(ubuntu):
图二(centos):
1、top 前 5 行统计信息
第 1 行是任务队列信息
top - 17:29:09 up 53days, 1 users, load average: 0.00, 0.01, 0.05
其参数如下:
内容 | 含义 |
17:29:09 | 表示当前时间 |
up 53days | 系统运行时间 格式为时:分 |
1 users | 当前登录用户数 |
load average: 0.00, 0.01, 0.05 | 系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。 |
load average:如果这个数除以逻辑 CPU 的数量,结果高于 5 的时候就表明系统在超负荷运转了。
第2行:
Tasks: 69 total, 2 running, 67 sleeping, 0 stopped, 0 zombie
第3行:
%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
第 2、3 行为进程和 CPU 的信息,当有多个CPU时,这些内容可能会超过两行,其参数如下:
内容 | 含义 |
69 total | 进程总数 |
2 running | 正在运行的进程数 |
158 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
0.0 us | 用户空间占用 CPU 百分比 |
0.0 sy | 内核空间占用 CPU 百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用 CPU 百分比 |
100.0 id | 空闲 CPU 百分比 |
0.0 wa | 等待输入输出的 CPU 时间百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
0.0 st | 用于有虚拟 CPU 的情况,用来指示被虚拟机偷掉的 CPU 时间 |
第4行:
KiB Mem: 1016168 total, 68820used, 567720 free, 379628 buffers
第5行:
KiB Swap: 0 total, 0 free ,0 used,.293196 avail Mem
第 4、5 行为内存信息,其参数如下:
内容 | 含义 |
KiB Mem: 1016168 total | 物理内存总量 |
567720 used | 使用的物理内存总量 |
68820 free | 空闲内存总量 |
379628 buffers(buff/cache) | 用作内核缓存的内存量 |
KiB Swap: 0 total | 交换区总量 |
0 used | 使用的交换区总量 |
0 free | 空闲交换区总量 |
0 cached Mem | 缓冲的交换区总量。 |
293196 avail Mem | 代表可用于进程下一次分配的物理内存数量 |
上述最后提到的缓冲的交换区总量,这里解释一下,所谓缓冲的交换区总量,即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
计算可用内存数有一个近似的公式:
第四行的 free + 第四行的 buffers + 第五行的 cached 。
二、进程信息
列名 | 含义 |
PID | 进程 id |
PPID | 父进程 id |
RUSER | Real user name |
UID | 进程所有者的用户 id |
USER | 进程所有者的用户名 |
GROUP | 进程所有者的组名 |
TTY | 启动进程的终端名。不是从终端启动的进程则显示为 |
PR | 优先级 |
NI | nice 值。负值表示高优先级,正值表示低优先级 |
P | 最后使用的 CPU,仅在多 CPU 环境下有意义 |
%CPU | 上次更新到现在的 CPU 时间占用百分比 |
TIME | 进程使用的 CPU 时间总计,单位秒 |
TIME+ | 进程使用的 CPU 时间总计,单位 1 / 100 秒 |
%MEM | 进程使用的物理内存百分比 |
VIRT | 进程使用的虚拟内存总量,单位 kb。VIRT = SWAP + RES |
SWAP | 进程使用的虚拟内存中,被换出的大小,单位 kb |
RES | 进程使用的、未被换出的物理内存大小,单位 kb。RES = CODE + DATA |
CODE | 可执行代码占用的物理内存大小,单位 kb |
DATA | 可执行代码以外的部分(数据段 + 栈)占用的物理内存大小,单位 kb |
SHR | 共享内存大小,单位 kb |
nFLT | 页面错误次数 |
nDRT | 最后一次写入到现在,被修改过的页面数。 |
S | 进程状态。D = 不可中断的睡眠状态、R = 运行、S = 睡眠、T = 跟踪/停止、Z = 僵尸进程 |
COMMAND | 命令名/命令行 |
WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags | 任务标志 |
3、其他
默认进入 top 时,各进程是按照 CPU 的占用量来排序的。
(1)在 top 基本视图中,按键盘数字“1”可以监控每个逻辑 CPU 的状况:
(2)敲击键盘‘b’(打开关闭加亮效果)top视图变换如下:
PID 为 9 为当前top视图中唯一的运行态进程。也可以敲击键盘‘y’来打开或者关闭运行态进程的加亮效果。
(3)敲击键盘‘x’(打开/关闭排序列的加亮效果),top 视图变换如下:
可以看到现在是按"%CPU"进行排序的,可以按”shift + >”或者”shift + <”左右改变排序序列。
4、改变进程显示字段
在 top 基本视图中,敲击“f”进入另一个视图,在这里可以编辑基本视图中的显示字段:
用上下键选择选项,按下空格键可以决定是否在基本视图中显示这个选项。
top 命令是一个非常强大的功能,但是它监控的最小单位是进程,如果想监控更小单位时,就需要用到 ps 或者 netstate 命令来满足我们的要求。
四、top 帮助文档
top 命令有很多,所以多看帮助文档才是首要,在交互界面按下“h”键即可,如下:
(SAW:Game Over!)