使用 top 命令事实监测进程

2018-12-07 08:30:39 +0800 CST

ps 命令虽然在收集运行在系统上的进程信息时非常有用,但它也有不足:ps 命令只能显示某个特定时间点的信息。如果你想要观察频繁进出内存的进程的趋势,用ps命令就不方便了。

top命令正好适用于这种场景。top命令跟ps命令相似,能够显示进程信息,但它是实时显示的。

shell # top
top - 08:20:24 up 212 days, 18:54,  1 user,  load average: 0.02, 0.03, 0.00
Tasks:  37 total,   1 running,  36 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3%us,  0.4%sy,  0.0%ni, 97.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1048576k total,   524004k used,   524572k free,        0k buffers
Swap:   524288k total,   109704k used,   414584k free,   247076k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                             
    1 root      20   0 21280  952  780 S  0.0  0.1   3:58.63 init                                                                                                                                                 
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd/51263                                                                                                                                       
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper/51263                                                                                                                                        
  160 root      16  -4 12688  328  244 S  0.0  0.0   0:00.00 udevd                                                                                                                                                
  514 root      20   0  184m 5432  816 S  0.0  0.5  34:00.13 rsyslogd                                                                                                                                             
  525 dbus      20   0 23452  352  348 S  0.0  0.0   0:00.00 dbus-daemon                                                                                                                                          
  535 root      20   0 94552  868  864 S  0.0  0.1   0:00.01 cupsd

输出的第一部分显示的是系统概况:第一行显示了当前时间、系统的运行时间、登陆的用户数以及系统的平均负载。

平均负债有3个值:最近一分钟的、最近5分钟的、最近15分钟的平均负载。值越大说明系统的负载越高。

第二行显示了概要的进程信息:top命令中进程教做人(task):做少进程处在运行、休眠、停止或者是僵化状态。

下一行显示了CPU信息。top根据进程的属主和进程的状态将CPU利用率分成几类输出。

紧跟其后的两行说明了系统内存的状态。前行说的是系统物理内存:总共多少内存,当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间的状态来说的。

最后一部分显示了当前运行中的进程的详细列表:

PID 进程的进程号

USER 进程的属主的名称

PR 进程的优先级别

NI 进程的谦让度

VIRT 进程占用的虚拟内存总量

RES 进程占用的物理内存总量

SHR 进程和其他进程共享的内存总量

S 进程的状态 (D 可中断的休眠状态,R 运行状态,S 休眠状态,T 跟踪状态或停止状态,Z 僵化状态)

%CPU 进程使用的CPU时间比例

%MEM 进程使用的内存占可用内存的比例

TIME+ 进程启动到目前为止使用的CPU时间总量

COMMAND 进程的命令行名称,也就是进程的程序名。