所谓工欲善其事,必先利其器
,对于开发人员来说,想要更好的了解你的系统运行状态,有一个得心应手的工具可以说是如虎添翼。今天我们来介绍一个工具top
,如果有在Linux线上环境维护经验,相信对top
程序应该不会陌生,。要想更好今天我们来看看这个程序的参数,注意:笔者使用的top版本是 3.2.8
,各版本参数可能有略微出入。
描述
top程序可以实时查看当前正在运行的系统的一些信息。它可以显示系统摘要信息以及由Linux内核管理的任务列表。它可以查看(包括CPU,任务,内存,交换区等信息)。
语法
top -hv | -abcHimMsS -d delay -n iterations [-u user | -U user] -p pid [,pid …]
参数列表
通常我们在控制台上键入top
会显示如下信息:
1
2
3
4
5
6
7
8
9
top - 23:16:58 up 1768 days, 4:16, 2 users, load average: 0.02, 0.12, 0.09
Tasks: 535 total, 1 running, 534 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.2%us, 0.9%sy, 0.0%ni, 97.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32827212k total, 31443176k used, 1384036k free, 338216k buffers
Swap: 8392696k total, 1303760k used, 7088936k free, 6680384k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
34413 root 20 0 6284 788 632 R 99.5 0.0 0:03.68 ss
...
Top前5行信息
我们先来分析一下top程序展示的前5行的信息。
第一行汇总信息
Key | Description |
---|---|
up | 系统持续运行的时间,格式为 (天,小时:分) |
users | 当前登录系统的用户数(也可以使用who 查看当前登录的用户) |
load average | 系统平均负载(分别表示前1分钟,前5分钟,前15分钟的平均任务队列的长度) |
第二行进程信息
Key | Description |
---|---|
total | 进程总数 |
running | 正在运行的进程数 |
sleeping | 处于睡眠状态的进程数 |
stopped | 已经停止的进程数 |
zombie | 僵尸进程的数量 |
第三行CPU信息
Key | Description |
---|---|
us | 用户空间的CPU时间百分比 |
sy | 内核空间的CPU时间百分比 |
ni | 低优先级的用户空间进程的CPU时间百分比 |
id | 空闲进程的CPU时间百分比 |
wa | I/O等待的CPU时间百分比 |
hi | 硬件中断的CPU时间百分比 |
si | 软件中断的CPU时间百分比 |
st | steal (time given to other DomU instances),是当hypervisor为另一个虚拟处理器提供服务时,虚拟CPU等待真实CPU的时间百分比,具体详见 |
第四行内存信息
Key | Description |
---|---|
total | 总内存大小 |
used | 已使用的内存大小 |
free | 未被分配的内存大小 |
buffers | 系统分配的,但未被使用的缓冲区剩余量,用作内核缓冲的内存大小 |
第五行交换区信息
Key | Description |
---|---|
total | 交换区总大小 |
used | 已使用的交换区大小 |
free | 空闲的交换区大小 |
cached | 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入 |
Top表格信息
字段
Key | Description |
---|---|
PID | 进程ID |
PPID | 父进程的进程ID |
RUSER | 进程所属的真实用户名称 |
UID | 进程所属的有效用户ID |
USER | 进程所属的有效用户名称 |
GROUP | 进程所属的有效组名称 |
TTY | 控制终端的名称,这通常是一些设备(如串行端口,pty等等) |
PR | 进程的优先级 |
NI | Nice值,我们知道Nice值越高,这个进程越不会去争抢CPU的执行时间 |
P | 上一次使用CPU的数字(SMP),多核下会有CPU0,CPU1…CPUn-1 |
%CPU | CPU使用率 |
TIME | CPU运行时间 |
TIME+ | CPU Time, hundredths,The same as ’TIME’, but reflecting more granularity through hundredths of a second. |
%MEM | 内存使用率,进程当前使用共享的可用物理内存 |
VIRT | 进程使用的虚拟内存大小。包括所有的代码,数据,共享库以及已交换的页面 |
SWAP | 已交换的大小 |
RES | 常驻物理内存大小 |
CODE | 可执行代码的物理内存大小 |
DATA | 数据+栈的物理内存大小 |
SHR | 共享内存大小 |
nFLT | 页失败数量,当进程尝试读、写不在其地址空间中的虚拟页时,会发生页失败。 |
nDRT | 脏页数量 |
S | 进程状态,有如下几种状态:D : 不中断睡眠R : 运行中S : 睡眠中T : 跟踪或者已停止Z : 僵尸状态 |
Command | 启动进程的命令行或者相关程序的名称 |
WCHAN | 根据内核软链映射(‘System.map’)的可用性,此字段将显示进程当前休眠的内核函数的名称和地址。运行中的进程将在此列显示破折号(‘-‘) |
Flags | 此列表示任务的当前计划标志,该标志以十六进制表示,并且不显示零。这些标志可以参见官方文档具体可以在<linux/sched.h>中找到。在’Field Select’和’Order fields’屏幕上也可以找到不太正式的文档。 |