详解top应该怎么看

Linux中的top命令显示系统上正在运行的进程。它是系统管理员最重要的工具之一。被广泛用于监视服务器的负载和进程。
(各个发行版的top可能会有出入,请参照对应系统的–help和man,以下展示均在centos7.4上完成。)

输出

首先,让我们了解一下输出。top会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出:
前几行水平显示了不同系统参数的概括,接下来是进程和它们在列中的属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
top - 15:16:42 up 103 days,  2:09,  1 user,  load average: 0.05, 0.09, 0.11
Tasks: 1067 total, 2 running, 1065 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65420768 total, 27637080 free, 4135944 used, 33647744 buff/cache
KiB Swap: 16777212 total, 16777212 free, 0 used. 60326400 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
165745 root 20 0 3486224 41824 10268 S 1.0 0.1 3635:03 vcs-agent
85707 root 20 0 163096 3320 1584 R 0.7 0.0 0:00.10 top
785 root 39 19 0 0 0 R 0.3 0.0 4154:39 kipmi0
2048 zabbixs+ 20 0 7643260 4740 2212 S 0.3 0.0 1:00.49 zabbix_server
2228 zabbixs+ 20 0 7646732 7212 4400 S 0.3 0.0 3:17.22 zabbix_server
2546 zabbixs+ 20 0 7646852 7236 4404 S 0.3 0.0 3:22.93 zabbix_server
48226 root 20 0 2366696 57548 16872 S 0.3 0.1 67:27.70 containerd
62322 root 20 0 0 0 0 S 0.3 0.0 0:00.91 kworker/u448:0
1 root 20 0 191164 4068 2464 S 0.0 0.0 16:17.96 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.82 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:39.27 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
8 root rt 0 0 0 0 S 0.0 0.0 0:01.23 migration/0

系统运行时间和平均负载

top - 15:16:52 up 103 days, 2:09, 1 user, load average: 0.06, 0.09, 0.11

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

这些字段意思是:

  • 当前时间
  • 系统已运行的时间
  • 当前登录用户的数量
  • 相应最近5、10和15分钟内的平均负载。
  • 可以使用’l’命令切换uptime的显示。

关于load average,我们可以粗略地按照如下计算方式。

load average/CPUs=usage percent

例如上面给出的0.06,这台机器的核心数量可以通过lscpu查看,是32,则利用率为0.1875%,且无进程在等待。

如果达到了65.00,则此时利用率为203.125%,且有33个进程在等待。

任务

Tasks: 1067 total, 2 running, 1065 sleeping, 0 stopped, 0 zombie
这一行说明了进程数量和进程类型。

CPU状态

%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
CPU状态,显示了不同模式下的百分比,分别为:

  • us-user
  • sy-system
  • ni-niced 优先级
  • wa-wait
  • hi-hardware_interrupt
  • si-software_interrupt
  • st-steal 常见于虚拟机,指被虚拟CPU偷走的时间。

内存使用

1
2
KiB Mem : 65420768 total, 27637080 free,  4135944 used, 33647744 buff/cache
KiB Swap: 16777212 total, 16777212 free, 0 used. 60326400 avail Mem

内存使用率,类似于free,第一行为物理内存,第二行为swap。

具体信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND          
165745 root 20 0 3486224 41824 10268 S 1.0 0.1 3635:03 vcs-agent
85707 root 20 0 163096 3320 1584 R 0.7 0.0 0:00.10 top
785 root 39 19 0 0 0 R 0.3 0.0 4154:39 kipmi0
2048 zabbixs+ 20 0 7643260 4740 2212 S 0.3 0.0 1:00.49 zabbix_server
2228 zabbixs+ 20 0 7646732 7212 4400 S 0.3 0.0 3:17.22 zabbix_server
2546 zabbixs+ 20 0 7646852 7236 4404 S 0.3 0.0 3:22.93 zabbix_server
48226 root 20 0 2366696 57548 16872 S 0.3 0.1 67:27.70 containerd
62322 root 20 0 0 0 0 S 0.3 0.0 0:00.91 kworker/u448:0
1 root 20 0 191164 4068 2464 S 0.0 0.0 16:17.96 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.82 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:39.27 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
8 root rt 0 0 0 0 S 0.0 0.0 0:01.23 migration/0

默认的列有如下:

意义
PID 进程ID,唯一标识符。
USER 进程所有者的实际用户名。
PR 进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。
NI 进程的nice值(优先级)。越小的值意味着越高的优先级。
VIRT 进程使用的虚拟内存。
RES 驻留内存大小。驻留内存是任务使用的非交换物理内存大小。
SHR 进程使用的共享内存。
S 这个是进程的状态。它有D/R/S/T/Z/I
%CPU 自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM 进程使用的可用物理内存百分比。
TIME+ 任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND 运行进程所使用的命令。

关于S,有如下状态:

类型 意义
D Disk Sleep,不可中断睡眠,一般为进程正在与硬件交互。
R Running,运行中。
S Interruptible Sleep,可中断睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入R。
T Traced/Stopped,调试器会触发Traced,发送SIGSTOP信号会触发Stopped。
Z Zombie,僵尸进程,父进程结束但未回收资源。
I Idle,空闲状态,一般不会消耗资源。

交互命令

h

输入h,出现帮助手册。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

Space/Enter

手动刷新,That’s all。

A

这个命令在全屏和交替模式间切换。在交替模式下会显示4个窗口:

  • Def-默认字段
  • Job-任务字段组
  • Mem-内存字段组
  • Usr-用户字段组

这四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方,交互命令只有在当前窗口有效。

可以使用a/w进行窗口切换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1:Def - 15:55:22 up 103 days,  2:48,  1 user,  load average: 0.27, 0.16, 0.15
Tasks: 1064 total, 1 running, 1063 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.4 sy, 0.0 ni, 99.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 65420768 total, 27620432 free, 4143136 used, 33657200 buff/cache
KiB Swap: 16777212 total, 16777212 free, 0 used. 60318688 avail Mem

1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
165745 root 20 0 3486224 41372 10268 S 3.6 0.1 3636:07 vcs-agent
85707 root 20 0 163096 3348 1600 R 1.6 0.0 0:10.35 top
135975 root 20 0 0 0 0 S 1.0 0.0 0:11.88 kworker/u449:2
10 root 20 0 0 0 0 S 0.5 0.0 169:29.55 rcu_sched
2392 zabbixs+ 20 0 7646732 7216 4404 S 0.5 0.0 3:34.37 zabbix_server
2416 zabbixs+ 20 0 7646748 7228 4400 S 0.5 0.0 3:25.69 zabbix_server
2659 zabbixs+ 20 0 7538696 2196 772 S 0.5 0.0 74:29.38 zabbix_server
48226 root 20 0 2366696 57464 16872 S 0.5 0.1 67:36.83 containerd
2 PID PPID TIME+ %CPU %MEM PR NI S VIRT RES UID COMMAND
222119 221078 3:28.78 0.0 0.0 20 0 S 444940 22272 48 php-fpm
221187 2 0:00.13 0.0 0.0 20 0 S 0 0 0 kworker/12:2
221084 221078 3:33.70 0.0 0.0 20 0 S 442892 20512 48 php-fpm
221083 221078 3:27.54 0.0 0.0 20 0 S 442876 20048 48 php-fpm
221082 221078 3:27.58 0.0 0.0 20 0 S 442632 19916 48 php-fpm
221081 221078 3:28.20 0.0 0.0 20 0 S 446976 24556 48 php-fpm
221080 221078 3:25.92 0.0 0.0 20 0 S 442896 19820 48 php-fpm
221078 1 2:25.13 0.0 0.0 20 0 S 431568 15696 0 php-fpm
217972 221078 3:08.63 0.0 0.0 20 0 S 442096 19300 48 php-fpm
3 PID %MEM VIRT RES CODE DATA SHR nMaj nDRT %CPU COMMAND
179000 1.1 16.613g 747632 13000 16.547g 10260 0 0 0.0 mysqld
54620 0.9 1067624 570548 4 928560 3268 0 0 0.0 python3
49479 0.2 2559012 100956 64656 2402868 31908 0 0 0.0 dockerd
48226 0.1 2366696 57464 36928 2302580 16872 0 0 0.5 containerd
165746 0.1 2771720 47136 12068 2734376 11968 0 0 0.0 agent-guan
165745 0.1 3486224 41372 17632 3457816 10268 0 0 3.6 vcs-agent
150146 0.1 856720 39908 4 499320 6080 0 0 0.0 salt-minion
165604 0.1 2172220 34436 5420 2125284 6412 0 0 0.0 supervisor
10095 0.1 2297068 34136 24828 2260848 9020 0 0 0.0 filebeat632
4 PID PPID UID USER RUSER TTY TIME+ %CPU %MEM S COMMAND
2018 1 993 zabbixs+ zabbixs+ ? 0:00.27 0.0 0.0 S zabbix_server
2036 2018 993 zabbixs+ zabbixs+ ? 19:00.24 0.0 0.0 S zabbix_server
2037 2018 993 zabbixs+ zabbixs+ ? 0:58.12 0.0 0.0 S zabbix_server
2038 2018 993 zabbixs+ zabbixs+ ? 1:43.64 0.0 0.0 S zabbix_server
2039 2018 993 zabbixs+ zabbixs+ ? 2:31.94 0.0 0.0 S zabbix_server
2040 2018 993 zabbixs+ zabbixs+ ? 0:59.83 0.0 0.0 S zabbix_server
2041 2018 993 zabbixs+ zabbixs+ ? 1:01.25 0.0 0.0 S zabbix_server
2042 2018 993 zabbixs+ zabbixs+ ? 1:02.12 0.0 0.0 S zabbix_server
2043 2018 993 zabbixs+ zabbixs+ ? 1:01.96 0.0 0.0 S zabbix_server

B

Bold,会让top部分关键字加粗。

c

切换是否显示进程启动时的完整路径和程序名。

d/s

时间间隔,如下,我输入了10,即10秒后刷新输出一次top信息。

1
2
3
4
5
6
1:Def - 15:58:10 up 103 days,  2:51,  1 user,  load average: 0.16, 0.15, 0.14
Tasks: 1069 total, 1 running, 1068 sleeping, 0 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
KiB Mem : 65420768 total, 27623968 free, 4139288 used, 33657512 buff/cache
KiB Swap: 16777212 total, 16777212 free, 0 used. 60322876 avail Mem
Change delay from 3.0 to 10

f

选择字段,*为已选择的字段。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Fields Management for window 1:Def, whose current sort field is %CPU
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 vMn = Minor Faults delta
* USER = Effective User Name USED = Res+Swap Size (KiB)
* PR = Priority nsIPC = IPC namespace Inode
* NI = Nice Value nsMNT = MNT namespace Inode
* VIRT = Virtual Image (KiB) nsNET = NET namespace Inode
* RES = Resident Size (KiB) nsPID = PID namespace Inode
* SHR = Shared Memory (KiB) nsUSER = USER namespace Inode
* S = Process Status nsUTS = UTS namespace Inode
* %CPU = CPU Usage
* %MEM = Memory Usage (RES)
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = Real User Name
SUID = Saved User Id
SUSER = Saved User Name
GID = Group Id
GROUP = Group Name
PGRP = Process Group Id
TTY = Controlling Tty
TPGID = Tty Process Grp Id
SID = Session Id
nTH = Number of Threads
P = Last Used Cpu (SMP)
TIME = CPU Time
SWAP = Swapped Size (KiB)
CODE = Code Size (KiB)
DATA = Data+Stack (KiB)
nMaj = Major Page Faults
nMin = Minor Page Faults
nDRT = Dirty Pages Count
WCHAN = Sleeping in Function
Flags = Task Flags <sched.h>
CGROUPS = Control Groups
SUPGIDS = Supp Groups IDs
SUPGRPS = Supp Groups Names
TGID = Thread Group Id
ENVIRON = Environment vars
vMj = Major Faults delta

i

空闲任务列表。

k

输入PID,结束任务。

l/t/m

l-不显示load average和uptime
t-进度条显示cpu信息/不显示cpu信息
m-进度条显示内存信息/不显示内存信息

R

切换进程的默认排序/PID顺序排序。

r

设置任务优先级。

V

将进程切换显示到树形图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                       
1 root 20 0 191164 4068 2464 S 0.0 0.0 16:18.29 systemd
671 root 20 0 39576 9024 8540 S 0.0 0.0 0:21.75 `- systemd-journal
692 root 20 0 129176 1312 964 S 0.0 0.0 0:00.00 `- lvmetad
965 libstor+ 20 0 8580 824 676 S 0.0 0.0 0:08.84 `- lsmd
968 root 20 0 22076 1708 1004 S 0.0 0.0 40:03.04 `- irqbalance
971 root 20 0 53452 3168 2296 S 0.0 0.0 0:00.37 `- smartd
972 root 20 0 6520 648 532 S 0.0 0.0 13:03.17 `- rngd
980 root 20 0 224476 6156 4300 S 0.0 0.0 0:56.00 `- abrtd
987 root 20 0 221876 4964 3536 S 0.0 0.0 0:00.10 `- abrt-watch-log
1001 dbus 20 0 60324 2548 1852 S 0.0 0.0 4:30.10 `- dbus-daemon
1267 root 20 0 110380 4200 3212 S 0.0 0.0 0:00.26 `- sshd
59370 root 20 0 159168 6240 4868 S 0.0 0.0 0:00.45 `- sshd
59372 root 20 0 116720 3376 1812 S 0.0 0.0 0:00.05 `- bash
110500 root 20 0 163276 3316 1584 R 1.0 0.0 0:00.16 `- top

x/y

高亮当前任务所在行列,开启彩色输出后会更明显。
![高亮后的效果]](/images/Snipaste_2021-01-25_16-12-57.png)

u

特定用户进程显示,输入用户名后只显示该用户进程,空白则显示全部用户。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
top - 16:14:37 up 103 days,  3:07,  1 user,  load average: 0.25, 0.21, 0.16
Tasks: 1068 total, 1 running, 1067 sleeping, 0 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
KiB Mem : 65420768 total, 27627364 free, 4133004 used, 33660400 buff/cache
KiB Swap: 16777212 total, 16777212 free, 0 used. 60329688 avail Mem
Which user (blank for all) root
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 191164 4068 2464 S 0.0 0.0 16:18.36 systemd
671 root 20 0 39576 9024 8540 S 0.0 0.0 0:21.76 `- systemd-journal
692 root 20 0 129176 1312 964 S 0.0 0.0 0:00.00 `- lvmetad
968 root 20 0 22076 1708 1004 S 0.0 0.0 40:03.20 `- irqbalance
971 root 20 0 53452 3168 2296 S 0.0 0.0 0:00.37 `- smartd
972 root 20 0 6520 648 532 S 0.0 0.0 13:03.23 `- rngd
980 root 20 0 224476 6156 4300 S 0.0 0.0 0:56.00 `- abrtd
987 root 20 0 221876 4964 3536 S 0.0 0.0 0:00.10 `- abrt-watch-log
1267 root 20 0 110380 4200 3212 S 0.0 0.0 0:00.26 `- sshd
59370 root 20 0 159168 6240 4868 S 0.0 0.0 0:00.52 `- sshd
59372 root 20 0 116720 3376 1812 S 0.0 0.0 0:00.05 `- bash
112478 root 20 0 163196 3432 1640 R 0.4 0.0 0:03.13 `- top
1348 root 20 0 24264 1596 1328 S 0.0 0.0 1:26.09 `- systemd-logind
1418 root 20 0 126412 1660 984 S 0.0 0.0 0:56.25 `- crond
1427 root 20 0 25904 944 744 S 0.0 0.0 0:00.03 `- atd
1961 root 20 0 110192 852 720 S 0.0 0.0 0:00.00 `- agetty
1964 root 20 0 110192 844 712 S 0.0 0.0 0:00.00 `- agetty
151369 root 20 0 43944 1860 1348 S 0.0 0.0 0:00.05 `- systemd-udevd
213155 root 20 0 228352 11212 6492 S 0.0 0.0 60:09.78 `- snmpd
54620 root 20 0 1067624 570564 3268 S 0.0 0.9 51:44.38 `- python3
150137 root 20 0 289656 19268 4748 S 0.0 0.0 0:00.12 `- salt-minion
150146 root 20 0 856720 39908 6080 S 0.1 0.1 112:59.09 `- salt-minion
150150 root 20 0 403088 18752 796 S 0.0 0.0 0:00.00 `- salt-minion

Z

可为不同的任务区改变配色/粗体等设置。

z

切换彩色/单色输出。

n/#

设置最大显示任务数量。

命令行

-b

批处理模式启动top。

-c

这个选项会以上次记住的程序/命令显示的状态显示(是否显示完整路径)。

-d

时间间隔,后面带整数,以秒计算。

-i

显示空闲进程。

-n

刷新次数,带整数,输入10则刷新10次后自动退出。

-p

监控特定PID。

-u/-U

监控特定用户/UID。