top命令详解

1. Top 命令输出

首先,让我们了解一下输出。top命令会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出:

top - 01:07:32 up 1 day,  1:01,  2 users,  load average: 0.00, 0.04, 0.10
Tasks: 418 total,   1 running, 417 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  0.3 sy,  0.3 ni, 97.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995732 total,   213340 free,   593972 used,   188420 buff/cache
KiB Swap:  2097148 total,   520408 free,  1576740 used.   258172 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                             
 20111 root      20   0 4887968  36288  15500 S  2.3  3.6  13:08.97 chrome                              
 20096 root      20   0  575392   6176   4352 S  0.7  0.6   3:54.71 chrome                              
   418 root      20   0       0      0      0 S  0.3  0.0   0:33.65 xfsaild/dm-0                        
 18406 root      20   0  497436   1100    724 S  0.3  0.1   0:00.40 chromedriver

1.1 系统运行时间和平均负载

top命令的顶部显示与uptime命令相似的输出。

top - 00:04:18 up 23:58,  2 users,  load average: 0.00, 0.01, 0.05

这些字段显示:

  • 当前时间
  • 系统已运行的时间
  • 当前登录用户的数量
  • 相应最近1、5和15分钟内的平均负载。

1.2 任务

Tasks: 406 total,   2 running, 404 sleeping,   0 stopped,   0 zombie

第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用’t’切换显示。


1.3 CPU 状态

%Cpu(s):  1.7 us,  0.7 sy,  0.0 ni, 97.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

下一行显示的是CPU状态。这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:

  • us, user:运行(未调整优先级的) 用户进程的CPU时间
  • sy,system: 运行内核进程的CPU时间
  • ni,niced:运行已调整优先级的用户进程的CPU时间
  • wa,IO wait: 用于等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si: 处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)

1.4 内存使用

KiB Mem :   995732 total,   228072 free,   590684 used,   176976 buff/cache
KiB Swap:  2097148 total,   575484 free,  1521664 used.   261512 avail Mem 

接下来两行显示内存使用率,有点像’free’命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。

物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。

按'm'键可以切换内存显示。


1.5 字段/列

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                             
 20111 root      20   0 4887968  36380  15616 S  2.0  3.7  12:30.44 chrome                              
 20096 root      20   0  575392   6200   4128 S  0.7  0.6   3:43.76 chrome                              
     1 root      20   0  125352   1076    552 S  0.0  0.1   0:02.00 systemd

在横向列出的系统属性和状态下面,是以列显示的进程。不同的列代表下面要解释的不同属性。
默认上,top显示这些关于进程的属性:

PID
进程ID,进程的唯一标识符

USER
进程所有者的实际用户名。

PR
进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。

NI
进程的nice值(优先级)。越小的值意味着越高的优先级。

VIRT
进程使用的虚拟内存。

RES
驻留内存大小。驻留内存是任务使用的非交换物理内存大小。

SHR
SHR是进程使用的共享内存。

S
这个是进程的状态。它有以下不同的值:

  • D – 不可中断的睡眠态
  • R – 运行态
  • S – 睡眠态
  • T – 被跟踪或已停止
  • Z – 僵尸态

%CPU
自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM
进程使用的可用物理内存百分比。

TIME+
任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND
运行进程所使用的命令。

还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。


2. 交互命令

我们之前说过top是一个交互命令。上一节我们已经遇到了一些命令。这里我们会探索更多的命令。

2.1 ‘h’: 帮助

首先,我们可以用’h’或者’?’显示交互命令的帮助菜单。

Help for Interactive Commands - procps-ng version 3.3.10
Window 1:Def: Cumulative mode Off.  System: Delay 3.0 secs; Secure mode Off.

  Z,B,E,e   Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
  l,t,m     Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
  0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
  f,F,X     Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width

  L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
  R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
  c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
  x,y     . Toggle highlights: 'x' sort field; 'y' running tasks
  z,b     . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
  u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
  n,#,^O  . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
  C,...   . Toggle scroll coordinates msg for: up,down,left,right,home,end

  k,r       Manipulate tasks: 'k' kill; 'r' renice
  d or s    Set update interval
  W,Y       Write configuration file 'W'; Inspect other output 'Y'
  q         Quit
          ( commands shown with '.' require a visible task display window ) 
Press 'h' or '?' for help with Windows,
Type 'q' or <Esc> to continue

2.2 "f": 字段管理

用于选择你想要显示的字段。用’*’标记的是已选择的。

Fields Management for window 2:Job, whose current sort field is PID
   Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
   'd' or <Space> toggles display, 's' sets sort.  Use 'q' or <Esc> to end!

* PID     = Process Id             PGRP    = Process Group Id       USED    = Res+Swap Size (KiB) 
* PPID    = Parent Process pid     TTY     = Controlling Tty        nsIPC   = IPC namespace Inode 
* TIME+   = CPU Time, hundredths   TPGID   = Tty Process Grp Id     nsMNT   = MNT namespace Inode 
* %CPU    = CPU Usage              SID     = Session Id             nsNET   = NET namespace Inode 
* %MEM    = Memory Usage (RES)     nTH     = Number of Threads      nsPID   = PID namespace Inode 
  USER    = Effective User Name    P       = Last Used Cpu (SMP)    nsUSER  = USER namespace Inode
* PR      = Priority               TIME    = CPU Time               nsUTS   = UTS namespace Inode 
* NI      = Nice Value             CODE    = Code Size (KiB)     
* S       = Process Status         DATA    = Data+Stack (KiB)    
* VIRT    = Virtual Image (KiB)    nMaj    = Major Page Faults   
* RES     = Resident Size (KiB)    nMin    = Minor Page Faults   
  SHR     = Shared Memory (KiB)    nDRT    = Dirty Pages Count   
  SWAP    = Swapped Size (KiB)     WCHAN   = Sleeping in Function
* UID     = Effective User Id      Flags   = Task Flags <sched.h>
* COMMAND = Command Name/Line      CGROUPS = Control Groups      
  RUID    = Real User Id           SUPGIDS = Supp Groups IDs     
  RUSER   = Real User Name         SUPGRPS = Supp Groups Names   
  SUID    = Saved User Id          TGID    = Thread Group Id     
  SUSER   = Saved User Name        ENVIRON = Environment vars    
  GID     = Group Id               vMj     = Major Faults delta  
  GROUP   = Group Name             vMn     = Minor Faults delta

2.3 "Z": 改变配色

按下’Z’向用户显示一个改变top命令的输出颜色的屏幕。可以为8个任务区域选择8种颜色。
aa.gif


2.4 "z": 显示/隐藏配色

bb.gif