在Linux中,top是非常常用的性能分析工具,可以实时查看系统的信息,进程情况,资源占用情况。

基本使用

1
2
# 在终端下,我们输入top进入
$ top

然后我们会得到这样一个信息界面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
top - 23:27:06 up 487 days, 11:26,  1 user,  load average: 0.00, 0.02, 0.06
Tasks: 85 total, 2 running, 83 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.7 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1884124 total, 89304 free, 1032600 used, 762220 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 652344 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24449 root 20 0 274856 6468 1808 S 0.3 0.3 39:19.95 docker-containe
28111 linbing+ 20 0 1261512 90252 12660 S 0.3 4.8 169:26.24 node /working/n
1 root 20 0 125156 2628 1380 S 0.0 0.1 47:24.70 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:05.39 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:44.43 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0

前面五行是系统的整体信息:
第一行其实与uptime命令相同:当前时间、系统运行时间、登录用户数、系统平均负载(1分钟、5分钟、15分钟)

二、三行是进程信息与CPU情况,当机器不止有一个CPU时,输入1,可以将各个cpu展开。
进程信息相对简单容易理解,CPU行分别为:

1
2
3
4
5
6
7
8
us: 用户占用cpu
sy:系统占用cpu
ni:用户修改进程优先级占用cpu
id:空闲cpu
wa:cpu等待io时间
hi:硬中断消耗cpu时间
si:软中断消耗cpu时间
st:虚拟机

四、五行是内存和交换区信息

接下来是进程相关信息,默认有许多信息没有展示出来,输入按键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
46
47
48
49
50
51
52
53
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
* USER = Effective User Name
* PR = Priority
* NI = Nice Value
* VIRT = Virtual Image (KiB)
* RES = Resident Size (KiB)
* SHR = Shared Memory (KiB)
* S = Process Status
* %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
vMn = Minor Faults delta
USED = Res+Swap Size (KiB)
nsIPC = IPC namespace Inode
nsMNT = MNT namespace Inode
nsNET = NET namespace Inode
nsPID = PID namespace Inode
nsUSER = USER namespace Inode
nsUTS = UTS namespace Inode

具体我们就不一一翻译了。

在进入top后,按q可以退出top界面

实用命令

使用top时,我们可以加入一些参数,比如:

  • -d seconds,可以指定刷新信息的频率
  • -c,显示进程的命令行参数
  • -p pid1,pid2…,指定进程号
1
2
假设输入`top -d 5 -c -p 10,300`
则代表每个5秒刷新信息,只显示进程号为10300的进程,同时显示进程的命令行参数

如果在启动时没有指定-d和c,在进入进程后也可以更改,直接按对应的按键即可。

另外在top中,直接输入下面的按键,有不同的效果:

1
2
M:按内存占用进行排序
t:切换进程展示信息

还有许多其他功能,在top中按?可以进行查看。