1 top命令 显示内容信息解读

top命令 不加参数 直接运行起来后,效果如下所示:

top - 19:57:08 up 5 days, 43 min,  2 users,  load average: 0.78, 0.64, 0.48
任务: 311 total, 1 running, 310 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.6 us, 1.5 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 31989.1 total, 766.9 free, 8866.6 used, 22355.7 buff/cache
MiB Swap: 2048.0 total, 1754.0 free, 294.0 used. 21853.9 avail Mem

进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
6662 wangdao+ 20 0 4749216 309056 112932 S 6.0 0.9 23:57.96 gnome-shell
184637 wangdao+ 20 0 2933448 286212 132560 S 5.3 0.9 12:23.41 Isolated Web Co
7087 wangdao+ 20 0 1009132 89104 60472 S 4.6 0.3 279:56.05 teams
6522 wangdao+ 20 0 548988 93944 43048 S 4.3 0.3 45:11.66 Xorg
6461 wangdao+ 9 -11 4035812 19616 14896 S 4.0 0.1 36:41.56 pulseaudio
7170 wangdao+ 20 0 13.6g 371032 65068 S 3.3 1.1 254:56.73 teams
184404 wangdao+ 20 0 6141184 873280 429656 S 3.3 2.7 35:40.81 firefox
7259 wangdao+ 20 0 5633868 220744 67344 S 2.3 0.7 123:48.56 teams
180769 wangdao+ 20 0 1066012 77552 50184 S 1.3 0.2 1:02.89 gnome-terminal-
181035 wangdao+ 20 0 20.5g 160116 108520 S 0.7 0.5 3:13.07 code
201723 wangdao+ 20 0 15248 4088 3144 R 0.7 0.0 0:00.08 top
45 root 20 0 0 0 0 S 0.3 0.0 3:29.69 ksoftirqd/5
910 root 20 0 1799724 21112 3672 S 0.3 0.1 5:19.43 containerd
6875 wangdao+ 20 0 7757664 188192 76444 S 0.3 0.6 9:28.62 teams
181100 wangdao+ 20 0 38.4g 420048 115620 S 0.3 1.3 13:45.32 code
181125 wangdao+ 20 0 20.3g 170548 58852 S 0.3 0.5 0:40.41 code
184633 wangdao+ 20 0 2644516 174204 108536 S 0.3 0.5 0:53.07 Isolated Web Co
192986 wangdao+ 20 0 32.6g 249212 168968 S 0.3 0.8 0:48.38 chrome
193029 wangdao+ 20 0 32.6g 161020 98400 S 0.3 0.5 0:45.98 chrome
199770 wangdao+ 20 0 1124.6g 175952 110160 S 0.3 0.5 0:22.13 chrome
201531 wangdao+ 20 0 5245032 126420 98452 S 0.3 0.4 0:00.22 cpptools-srv
1 root 20 0 168984 12864 8144 S 0.0 0.0 0:15.48 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
7 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq

1.1 系统整体统计信息

接下来我们详细分析系统统计信息:

top - 19:57:08 up 5 days, 43 min,  2 users,  load average: 0.78, 0.64, 0.48
任务: 311 total, 1 running, 310 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.6 us, 1.5 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 31989.1 total, 766.9 free, 8866.6 used, 22355.7 buff/cache
MiB Swap: 2048.0 total, 1754.0 free, 294.0 used. 21853.9 avail Mem

@1 总体统计信息

我们以第1行总信息为例:

top - 19:57:08 up 5 days, 43 min,  2 users,  load average: 0.78, 0.64, 0.48

load average: 0.00, 0.01, 0.01 表示系统负载,而有3个值是因为分别表示 CPU 1分钟,5分钟,15分钟平均负载。

第2行信息 如下:

任务: 311 total,   1 running, 310 sleeping,   0 stopped,   0 zombie

表示 系统现在共有311个进程,其中处于运行中的有1个,310个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

@2 CPU信息详细解读

我们以第3行CPU信息为例:

%Cpu(s):  2.6 us,  1.5 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

这里详细解读下 us sy ni 。。。等等这些含义解读如下:

  • us:用户态进程占用cpu时间%
  • sy:内核态进程占用cpu时间%
  • ni:代表优先被调度的进程占cpu时间%
  • id:cpu idle(空闲)状态%
  • wa:cpu wait(等待io)状态%
  • hi:hardware interrupt 硬中断,处理硬件中断占CPU的时间
  • si:software interrupt 软中断,处理软件中断占CPU的时间
  • st:浪费掉的cpu,被强制等待虚拟CPU的时间

@3 MEM & swap 信息详细解读

第4、5行信息相对解读容易

MiB Mem :  31989.1 total,    766.9 free,   8866.6 used,  22355.7 buff/cache
MiB Swap: 2048.0 total, 1754.0 free, 294.0 used. 21853.9 avail Mem
  • 第4行的 total表示所有物理内存,free表示空闲物理内存总量,used表示使用总量,buff/cache表示缓存的内存量。
  • 第5行的 total表示交换区总量物理内存总量,free表示空闲交换区物理内存总量,used表示交换区使用总量,bavail Mem 表示 虚拟内存总量。

1.2 top显示信息字段

我们首先对top命令中统计信息之后的行 ,他们的字段进行下解读:

  • USER:表示进程所有者的用户名
  • PR:表示优先级。
  • NI:nice值,表优先级。注意:负值表高优先级,正值表低优先级,数值越小优先级越高。
  • VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR:共享内存大小,单位kb
  • %CPU:CPU资源占用百分比
  • %MEM:进程使用的物理内存百分比
  • TIME+:进程使用的CPU时间总计,单位为0.01秒
  • COMMAND:命令名/命令行

1.3 基本显示信息可编辑

这里不止可以显示如上信息,还可以通过 “f” 操作,进入另一个视图,对显示字段进行编辑,点击“f”后编辑视图如下所示:

Fields Management for window 1:Def, whose current sort field is TTY
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!

* USER = Effective User Name nsNET = NET namespace Inode
* PR = 优先级 nsPID = PID namespace Inode
* NI = Nice Value nsUSER = USER namespace Inode
* VIRT = Virtual Image (KiB) nsUTS = UTS namespace Inode
* RES = Resident Size (KiB) LXC = LXC container name
* SHR = Shared Memory (KiB) RSan = RES Anonymous (KiB)
* 日 = 进程状态 RSfd = RES File-based (KiB)
* %CPU = CPU 使用情况 RSlk = RES Locked (KiB)
* %MEM = Memory Usage (RES) RSsh = RES Shared (KiB)
* TIME+ = CPU Time, hundredths CGNAME = Control Group name
* COMMAND = Command Name/Line NU = Last Used NUMA node
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = 真实用户名
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)
时间 = 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
标志 = Task Flags <sched.h>
CGROUPS = Control Groups
SUPGIDS = Supp Groups IDs
SUPGRPS = Supp Groups Names
TGID = Thread Group Id
OOMa = OOMEM Adjustment
OOMs = OOMEM Score current
ENVIRON = Environment vars
vMj = Major Faults delta
vMn = Minor Faults delta
USED = Res+Swap Size (KiB)
nsIPC = IPC namespace Inode
nsMNT = MNT namespace Inode
* 进程号 = 进程编号

在这里可以通过“空格”按键 来选择或者删除对应显示的字段,比较方便。同时对这里其余的一些常用字段进行解读,如下所示:

@1 进程id相关:

  • PID:表示进程id
  • PPID:表示父进程id
  • UID:表示进程所有者的用户id
  • GROUP:表示进程所有者的组名

@2 CPU相关:

  • TIME:进程使用的CPU时间总计,单位为秒
  • P: 最后使用的CPU,多CPU环境下有意义,单CPU无意义。
  • nTH:线程数量

@3 内存相关:

  • SWAP:进程使用的虚拟内存中,被换出的大小,单位kb。
  • CODE:可执行代码占用的物理内存大小,单位kb
  • DATA:可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
  • nFLT:页面错误次数
  • nMaj :已请求的内存页还没有被加载,这是主要的应用申请内存产生的请求
  • nMin :内存页已加载但是没有被MMU管理
  • nDRT:最后一次写入到现在,被修改过的页面数。

@4 进程线程相关:

  • TTY:表示启动进程的终端名。而不是从终端启动的进程则显示为 ?
  • nT:线程数量
  • S:进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
  • WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
  • Flags:任务标志,sched.h定义

1.4 实时控制top命令显示内容

此时可以通过 top 的内部命令对进程的显示方式进行控制,实时显示。内部命令和其功能如下:

#1 变更显示内容:
s # 改变画面更新频率
l # 关闭或开启 上数 第1行 top 信息的表示
t # 关闭或开启 上数 第2行 Tasks 和第3行 Cpus 信息的表示
m # 关闭或开启 上数 第4行 Mem 和 第5行 Swap 信息的表示
f # 进入另一个视图,进入后可以编辑基本视图中的显示字段,可以查看更多信息

#2 排列显示信息
N # 以 PID 大小 顺序排列表示进程列表
P # 以 CPU 占用率大小 顺序排列进程列表
M # 以内存占用率大小 顺序排列进程列表

#3
h # 显示帮助信息(如何在top命令显示的界面中进行的按键操作)
n # 设置 进程列表所显示的进程数量
q # 退出命令

2 Top命令操作

top命令的常见操作整理如下:

#设置更新次数,更新三次后终止更新显示
$top -n 3
#批次档模式,配合"-n"参数,可以用来将 top 的结果输出到文件
$top -b -n 2 > top.txt

#设置更新周期 3秒一次
$top -d 3

#只跟踪指定进程pid=1152
$top -p 1152
#跟踪进程1152 和该进程的线程
$top -p -H 1152

#默认为显示部COMMAND缩写信息,-c表示显示完整信息,不再缩写
$top -c

#查看指定的root用户组相关进程的信息
$top -u root

3 htop命令

top命令虽然功能强大,但与Linux传统的 top命令相比,htop 更人性化,支持带有颜色的显示形式,相比top命令可以支持鼠标操作。从功能上讲 top命令 和 htop命令 基本是一致的,无非是后者交互上更方便,htop运行起来是这样的:

Linux工具 top命令/htop命令 性能分析工具_linux

可以看到 信息分布上相对于top命令有调整,系统统计信息内容相差不大,都是基本信息,CPU使用情况、MEM、swap使用情况,但信息统计学分布位置和显示效果发生了变化,如下所示:

Linux工具 top命令/htop命令 性能分析工具_服务器_02

关于进程信息的展示,一般用鼠标和 F1-F10来进行操作:

Linux工具 top命令/htop命令 性能分析工具_物理内存_03

这里解读下不同于top的操作方式,htop是通过F1-F10来进行对应操作,非常方便:

  • F1:help
  • F2:设置颜色方案、列等展示信息
  • F3:搜索command列中的信息
  • F4:过滤command列中匹配的进程
  • F5:按照进程树样式展示
  • F6:根据选择的列排序,这个用鼠标操作更方便
  • F7:减小进程优先级
  • F8:增加进程优先级
  • F9:杀死进程,先选中进程,然后选择需要发送的信号
  • F10:exit

总结下,htop无非是top命令的界面版,操作方式上会有不同,但本质上的功能几乎一致。