top命令使用

top 动态、交互式进程管理器

使用格式:

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明:

d
指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之
p
通过指定监控进程ID来仅仅监控某个进程的状态
q
该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行
S
指定累计模式
s
使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险
i
使top不显示任何闲置或者僵死进程
c
显示整个命令行而不只是显示命令名

交互参数(常用):

l
切换显示平均负载和启动时间信息
m
切换显示内存信息
t
切换显示进程和CPU状态信息
c
切换显示命令名称和完整命令行
M
根据驻留内存大小进行排序
P
根据CPU使用百分比大小进行排序
1
显示多cpu的情况

交互参数(一般):

h
显示帮助画面,给出一些简短的命令总结说明
k
终止一个进程.系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号.一般的终止进程可以使用15信号;如果不能正常结束那就使用信号?强制结束该进程.默认值是信号15.在安全模式中此命令被屏蔽
i
忽略闲置和僵死进程.这是一个开关式命令
q
退出程序
r
重新安排一个进程的优先级别.系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值.输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权.默认值是10
S
切换到累计模式
s
改变两次刷新之间的延迟时间.提示输入新的时间,单位为s.输入0将不断刷新,默认是5s
f/F
从当前显示中添加或者删除项目
o/O
改变显示项目的顺序
T
根据时间/累计时间进行排序
W
将当前设置写入 ``~/.toprc`` 文件中.这是写top配置文件的推荐方法

使用实例及解析:

top - 18:08:26 up 11 days,  3:11,  9 users,  load average: 0.63, 0.70, 0.64
Tasks: 249 total,   1 running, 248 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.5%us, 15.5%sy,  2.3%ni, 80.6%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   3952136k total,  3789956k used,   162180k free,    51736k buffers
Swap:  9936888k total,  1190692k used,  8746196k free,   730836k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
11111 gordon    20   0 1514m 839m 806m S   39 21.7   3995:23 VirtualBox
1382 root      20   0  222m  38m 9468 S    3  1.0 247:22.90 Xorg
9384 gordon    20   0  807m 165m  25m S    1  4.3 317:51.95 chrome

前五行是系统整体的统计信息,第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

18:08:26            当前运行时间
up 11 days, 3:11    系统运行时间,格式: 天 时:分
9 users,            当前登陆用户数
load average: 0.63, 0.70, 0.64     系统负载,即任务队列的平均长度,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

第二行为进程和CPU的信息:

Tasks: 249 total      进程总数
1 running             正在运行的进程数
248 sleeping          睡眠的进程数
0 stopped             停止的进程数
0 zombie              僵尸进程数

第三行为CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Cpu(s):
1.5%us       用户空间占用CPU百分比
15.5%sy      内核空间占用CPU百分比
2.3%ni       用户进程空间内改变过优先级的进程占用CPU百分比
80.6%id      空闲CPU百分比
0.0%wa       等待输入输出的CPU时间百分比
0.0%hi
0.2%si
0.0%st

第四行为内存信息,内容如下:

Mem:   3952136k total        物理内存总量
3789956k used                使用的物理内存总量
162180k free                 空闲内存总量
51736k buffers               用作内核缓存的内存量

最后一行为交換区信息:

Swap:  9936888k total       交换区总量
1190692k used               使用的交换区总量
8746196k free               空闲交换区总量
730836k cached              缓冲的交换区总量(内存中的内容被换出到交换区,而后又被换入到内存,
                            但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小.
                            相应的内存再次被换出时可不必再对交换区写入)

进程信息区说明:

A    *PID         进程id
B     PPID        父进程的用户id
C     RUSER       Real user name
D     UID         进程所有者的用户id
E    *USER        进程所有者的用户名
F     GROUP       进程所有者的组名
G     TTY         启动进程的终端名(不是从终端启动的进程则显示为?)
H    *PR          优先级
I    *NI          nice值(负值表示高优先级)
J     P           最后使用的CPU,仅在多CPU环境下有意义
K    *%CPU        上次更新到现在的CPU时间占用百分比
L     TIME        进程使用的CPU时间总计(单位秒)
M    *TIME+       进程使用的CPU时间总计(单位1/100秒)
N    *%MEM        进程使用的物理内存百分比
O    *VIRT        进程使用的虚拟内存总量(单位kb)[VIRT=SWAP+RES]
P     SWAP        进程使用的虚拟内存中,被换出的大小(单位kb)
Q    *RES         进程使用的、未被换出的物理内存大小(单位kb)[RES=CODE+DATA]
R     CODE        可执行代码占用的物理内存大小(单位kb)
S     DATA        可执行代码以外的部分(数据段+栈)占用的物理内存大小(单位kb)
T    *SHR         共享内存大小(单位kb)
U     nFLT        页面错误次数
V     nDRT        最后一次写入到现在,被修改过的页面数
W    *S           进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
X    *COMMAND     命令名/命令行
Y     WCHAN       若该进程在睡眠,则显示睡眠中的系统函数名
Z     Flags       任务标志,参考 sched.h

更改显示内容的交互操作:

f    键可以选择显示的内容(有*的为显示, 无的为不显示)[回车返回]
o    键改变列的显示顺序(大写列向左移,小写列向右移)[回车返回]
F/O  选择某一列,按照此列进行排序[回车返回]
R    可以将当前的排序倒转

常用命令:

top -u <user>   # linux
top -U <user>   # mac

最常用的说明:

VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来

DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

实例:

// 查看进程下的所有线程cpu利用率
top -H -p 25120