My Profile Photo

庄津津的技术博客


众里寻他千百度,蓦然回首,那人却在灯火阑珊处


Linux Top命令解析

所谓工欲善其事,必先利其器,对于开发人员来说,想要更好的了解你的系统运行状态,有一个得心应手的工具可以说是如虎添翼。今天我们来介绍一个工具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’屏幕上也可以找到不太正式的文档。