TOP命令详解

让我们研究top信息的意义,以top的如下输出为例:
top - 15:17:24 up 32 days,    1:13,    7 users,    load average: 0.00, 0.00, 0.00
Tasks: 180 total,     1 running, 175 sleeping,     4 stopped,     0 zombie
Cpu(s):    0.1%us,    0.1%sy,    0.0%ni, 99.8%id,    0.0%wa,    0.0%hi,    0.0%si,    0.0%st
Mem:    16432184k total, 12142192k used,    428×××k free,     179888k buffers
Swap:    2096440k total,            388k used,    2096052k free,    9772516k cached

    PID USER            PR    NI    VIRT    RES    SHR S %CPU %MEM        TIME+    COMMAND                                                                                                                                                                                                                        
2472 stanley     25     0 2577m 506m    13m S    0.0    3.2     0:31.67 java                                                                                                                                                                                                                                
4730 stanley     22     0 2482m 389m    10m S    0.0    2.4     0:14.33 java                                                                                                                                                                                                                                
4166 stanley     22     0 2483m 378m    10m S    0.0    2.4     0:14.04 java                                                                                                                                                                                                                                
6012 stanley     22     0 2537m 338m    10m S    0.0    2.1     0:14.01 java                                                                                                                                                                                                                                
4609 root            15     0    210m    63m 4088 S    0.0    0.4     0:02.81 snmpd                                                                                                                                                                                                                            
3359 stanley     17     0 4418m    42m 8892 S    0.0    0.3    57:46.11 jstatd                                                                                                                                                                                                                            
6186 root            18     0    225m    22m 5988 S    0.0    0.1     3:41.76 dsm_om_connsvc3                                                               
top输出的第一行显示负载平均值信息:
top - 15:20:00 up 32 days,    1:15,    7 users,    load average: 0.00, 0.00, 0.00
这个输出与uptime的输出类似。从中可看到Linux已经运行时间、当前时间和用户数量,以及1分钟、5分钟和15分钟负载平均值。接下来显示进程概要:
Tasks: 180 total,     1 running, 175 sleeping,     4 stopped,     0 zombie
我们看到总共有180个进程,其中175个进程正在休眠,一个进程正在运行,没有僵化进程或者,4个停止的进程。当一个进程退出并且它的父进程没有通过wait(2)或者waitpid(2)函数等待它时,它就会成为僵化进程。这通常是由于父进程在它的子进程之前退出造成的。不同于进程表中的项,僵化进程不使用资源。停止的进程是已经向它发送STOP信号的进程。更多信息,请参见signal(7)手册页。
接下来是CPU信息:
Cpu(s):    0.0%us,    0.0%sy,    0.0%ni, 99.9%id,    0.0%wa,    0.0%hi,    0.0%si,    0.0%st
CPU行描述CPU如何使用它们的CPU周期。top命令报告CPU在用户或者内核模式、运行良好进程以及处在空闲状态时所花费时间的百分比。iowait列显示没有进程在CPU上运行时,处理器等待I/O完成的时间的百分比。irq和softirq列表示处理硬件和软件中断所花费的时间。早于2.6版本的Linux内核不报告irq、softirq和iowait。
接下来是内存信息:
Mem:    16432184k total, 12142484k used,    4289700k free,     180804k buffers
前三个指标提供内存使用的概要,列出了总的可用内存、已使用内存和自由内存,它们都是确定对于Linux内存是否足够所需信息。
接下来五个指标标识已使用的内存如何分配。shrd字段显示共享的内存使用,buff是缓冲使用的内存。分配给内核或者用户进程的内存可以处在三种不同状态:活动(active)、不活动脏(inactive dirty)和不活动干净(inactive clean)。活动在top中用aotv表示,表示该内存最近被使用。不活动脏在top中用in_d表示,表示该内存最近没有使用,可以回收。要回收内存,必须将它的内容写到磁盘,这个进程命名为“清洗”,也可称作内存的第四种临时状态。一旦被清洗,不活动脏内存成为不活动干净内存,在top中用in_c表示。由Norm Murray和Neil Horman合著的Understanding Virtual Memory in Red Hat Enterprise Linux 3是一本优秀的参考书,网址为http:people.redhat.com/nhorman/papers/ rhel3_vm.pdf。
接下来是交换区信息:
Swap:    2096440k total,            388k used,    2096052k free,    9772512k cached
 
av字段是可用的交换区总量,之后是已用数量和自由数量,最后是内核用于缓存的内存数量。
top显示的其余部分是进程信息:
PID USER            PR    NI    VIRT    RES    SHR S %CPU %MEM        TIME+    COMMAND                                                                                                                                                                                                                        
2472 stanley     25     0 2577m 506m    13m S    0.0    3.2     0:31.72 java                                                                                                                                                                                                                                
4730 stanley     22     0 2482m 389m    10m S    0.0    2.4     0:14.34 java 
 
top显示尽可能多的能适合屏幕的进程。top(1)手册页中提供了字段说明的描述。表3-1提供了这些字段的概要。
表3-1                                                      top进程字段
字    段
说    明
PID
进程id编号
USER
进程所有者的用户名
PRI
进程的优先级
SIZE
进程大小,包括它的代码、栈和数据区域,以千字节为单位
RSS
进程使用的内存总量,以千字节为单位
SHARE
进程使用的共享内存数量
STAT
进程的状态,通常R表示运行,S表示休眠
%CPU
自从最近的屏幕更新以来,这个进程使用的CPU百分比
%MEM
这个进程使用的内存百分比
TIME
自从进程启动以来,这个进程使用的CPU时间量
CPU
最近执行进程的CPU
COMMAND
正在执行的命令
 
 

交互命令指南,更多参考:http://os.51cto.com/art/201005/200652.htm, http://www.huanxiangwu.com/363/linux-top

 

1.全局命令

回车、空格 : 刷新显示信息

?、h : 帮助

= : 移除所有任务显示的限制

A : 交替显示模式切换

B : 粗体显示切换

d、s : 更改界面刷新时间间隔

G : 选择其它窗口/栏位组

I : Irix或Solaris模式切换

u、U : 监控指定用户相关进程

k : 结束进程

q : 退出top

r : 重新设定进程的nice值

W : 存储当前设定

Z : 改变颜色模板

2.摘要区命令

l : 平均负载及系统运行时间显示开关

m : 内存及交换空间使用率显示开关

t : 当前任务及CPU状态显示开关

1 : 汇总显示CPU状态或分开显示每个CPU状态    

3.任务区命令

外观样式

b : 黑体/反色显示高亮的行/列。控制x和y交互命令的顯示樣式。

x : 高亮显示排序的列

y : 高亮显示正在运行的任务

z : 彩色/黑白显示。

显示内容

c : 任务执行的命令行或进程名称

f、o : 增加和移除进程信息栏位及调整进程信息栏位显示顺序

H : 显示线程

S : 时间累计模式

u : 监控指定用户相关进程

任务显示的数量

i : 显示空闲的进程

n或# : 设置任务显示最大数量

任务排序

M : 按内存使用率排序

N : 按PID排序

P : 按CPU使用率排序

T : 按Time+排序

< : 按当前排序栏位左边相邻栏位排序

> : 按当前排序栏位右边相邻栏位排序

F 或 O : 选择排序栏位

R : 反向排序

 

问题1:ps和top命令的%CPU含义

http://blog.thematice.com/html/y2009/09/27/748/ps%E5%92%8Ctop%E5%91%BD%E4%BB%A4%E7%9A%84cpu%E5%90%AB%E4%B9%89.html

一直以为ps命令中的”%CPU”也是指实时的CPU使用率,所以一直都用它来做cacti监控process的cpu使用率。但是上周发现有点不对,ps的”%CPU”与top或者vmstat 的”%CPU”不一样。

ps命令的man里面的解释:

CPU usage is currently expressed as the percentage of time spent running during the entire lifetime of a process. This is not ideal, and it does not conform to the standards that ps otherwise conforms to. CPU usage is unlikely to add up to exactly 100%.

top命令的man的解释:

k: %CPU -- CPU usage
The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU
time. In a true SMP environment, if 'Irix mode' is Off, top will operate in number of CPUs. You toggle
'Irix/Solaris' modes with the 'I' interactive command.

我的理解是,top中的进程cpu使用率,是实时的CPU使用率,也就是

单位时间内进程使用的CPU时间/单位时间
而ps命令中的cpu使用率,反映的是该进程启动以来使用系统资源的情况:

进程启动以来使用的CPU时间/进程启动以来的实际时间
两者有很大的区别。
(上述所说的ps和top命令所在的操作系统是debian)。