Top命令是linux 下常用的系统性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于windows的任务管理器。下面详细介绍它的使用方法。

 

top 可以显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等

参数
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式

-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数

 

top - 14:47:16 up  4:11,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  83 total,   1 running,  80 sleeping,   2 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.6%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    508176k total,   301812k used,   206364k free,    63280k buffers
Swap:   521212k total,        0k used,   521212k free,   175284k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                         
 1774 root      20   0  2856 1076  852 R  7.6  0.2   0:00.09 top                             
    1 root      20   0  3540 1920 1252 S  0.0  0.4   0:01.73 init                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.03 kthreadd                        
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.62 ksoftirqd/0                     
    5 root      20   0     0    0    0 S  0.0  0.0   0:00.49 kworker/u:0                     
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                     
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.60 watchdog/0                      
    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset                          
    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper                         
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kdevtmpfs                       
   11 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns                           
   12 root      20   0     0    0    0 S  0.0  0.0   0:00.47 sync_supers                     
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 bdi-default                     
   14 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kintegrityd                     
   15 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kblockd                         
   16 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 ata_sff                         
   17 root      20   0     0    0    0 S  0.0  0.0   0:00.07 khubd                           
   18 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 md                              
   21 root      20   0     0    0    0 S  0.0  0.0   0:00.02 khungtaskd                      
   22 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kswapd0                         
   23 root      25   5     0    0    0 S  0.0  0.0   0:00.00 ksmd                            
   24 root      20   0     0    0    0 S  0.0  0.0   0:00.00 fsnotify_mark                   
   25 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ecryptfs-kthrea     
   

统计信息区

 

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

01:06:48                        当前时间
up 1:22                            系统运行时间,格式为时:分
1 user                            当前登录用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。

三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

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

Tasks: 29 total        进程总数
1 running            正在运行的进程数
28 sleeping            睡眠的进程数
0 stopped            停止的进程数
0 zombie            僵尸进程数
Cpu(s): 0.3% us        用户空间占用CPU百分比
1.0% sy                内核空间占用CPU百分比
0.0% ni                用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id            空闲CPU百分比
0.0% wa                等待输入输出的CPU时间百分比
0.0% hi     
0.0% si     

最后两行为内存信息。内容如下:

Mem: 191272k total        物理内存总量
173656k used            使用的物理内存总量
17616k free                空闲内存总量
22052k buffers            用作内核缓存的内存量
Swap: 192772k total        交换区总量
0k used                    使用的交换区总量
192772k free            空闲交换区总量
123988k 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

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

 

下面是top命令的部分截图:

 

第一行 分别显示:系统当前时间 系统运行时间 当前用户登陆数 系统负载。

*系统负载(load average),这里有三个数值,分别是系统最近1分钟,5分钟,15分钟的平均负载。一般对于单个处理器来说,负载在0 — 1.00 之间是正常的,超过1.00就要引起注意了。在多核处理器中,你的系统均值不应该高于处理器核心的总数。

 

第二行 分别显示:total进程总数、 running正在运行的进程数、 sleeping睡眠的进程数、stopped停止的进程数、 zombie僵尸进程数。 

 

第三行

分别显示:

  • %us 用户空间占用CPU百分比、
  • %sy 内核空间占用CPU百分比、
  • %ni 用户进程空间内改变过优先级的进程占用CPU百分比、
  •  %id 空闲CPU百分比、
  • %wa 等待输入输出(I/O)的CPU时间百分比 、
  • %hi指的是cpu处理硬件中断的时间、%si指的是cpu处理软中断的时间 、
  • %st用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间。

通常id%值可以反映一个系统cpu的闲忙程度。

 

第四行 MEM :total 物理内存总量、    used 使用的物理内存总量、free 空闲内存总量、    buffers 用作内核缓存的内存量。

 

第五行 SWAP:total 交换区总量、     used 使用的交换区总量、free 空闲交换区总量、 cached 缓冲的交换区总量。

 

buffers和cached的区别需要说明一下,buffers指的是块设备的读写缓冲区,cached指的是文件系统本身的页面缓存。它们都是linux操作系统底层的机制,目的就是为了加速对磁盘的访问。

 

第六行  PID(进程号)、 USER(运行用户)、PR(优先级)、NI(任务nice值)、VIRT(虚拟内存用量)VIRT=SWAP+RES 、RES(物理内存用量)、SHR(共享内存用量)、S(进程状态)、%CPU(CPU占用比)、%MEM(物理内存占用比)、TIME+(累计CPU占用时间)、 COMMAND 命令名/命令行。