Linux下shell命令用法及常见用例:top

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的使用工具。top命令提供了互动式的界面,用热键管理。这个命令是一个非常重要和常用的命令,但是同时也有点复杂,参数较多,怎么能够掌握好呢?用了这么多年,也都一直没有用好。老老实实读一遍手册,总体了解一下都有什么才好去做整理,有的时候可能连它都有什么功能都不知道。

命令格式

top [选项]

命令功能

top命令用来显示Linux的处理器活动和内核实时管理的任务。它会显示正在使用的处理器和内存以及运行进程等其他信息。

命令选项

  • -b:以批处理模式操作。
  • -c:显示完整的命令。
  • -d:屏幕刷新间隔时间。
  • -I:忽略失效过程。
  • -s:保密模式。
  • -S:累积模式。
  • -i<时间>:设置间隔时间。
  • -u<用户名>:指定用户名。
  • -p<进程号>:指定进程。
  • -n<次数>:循环显示的次数。

top交互命令

top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

  • h:显示帮助画面,给出一些简短的命令总结说明。
  • k:终止一个进程。
  • i:忽略闲置和僵死进程,这是一个开关式命令。
  • q:退出程序。
  • r:重新安排一个进程的优先级别。
  • S:切换到累计模式。
  • s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s。
  • f或者F:从当前显示中添加或者删除项目。
  • o或者O:改变显示项目的顺序。
  • l:切换显示平均负载和启动时间信息。
  • m:切换显示内存信息。
  • t:切换显示进程和CPU状态信息。
  • c:显示进程启动时的完整路径和程序名。
  • M:根据驻留内存大小进行排序。
  • P:根据CPU使用百分比大小进行排序。
  • T:根据时间/累计时间进行排序。
  • w:将当前设置写入~/.toprc文件中。

界面解释

1
2
3
4
5
top - 21:52:52 up 247 days,  6:23,  2 users,  load average: 0.09, 0.12, 0.13
Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.0 us, 2.3 sy, 0.0 ni, 93.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3881808 total, 153396 free, 3577588 used, 150824 buff/cache
KiB Swap: 4063228 total, 1206484 free, 2856744 used. 86344 avail Mem

统计信息区前五行是系统整体的统计信息。
系统运行时间和平均负载
第一行是任务队列信息,同uptime命令的执行结果,可以使用l命令切换uptime的显示。其内容如下:

  • 21:52:52:当前时间。
  • up 247 days, 6:23:系统运行时间。
  • 2 users:当前登录用户数。
  • load average: 0.09, 0.12, 0.13:系统负载,即任务队列平均长度。分别为1、5、15min前到现在平均值。

进程
第二行为进程信息。内容如下:

  • 126 total:进程总数[键入H可查看线程数]。
  • 1 running:正在运行的进程。
  • 125 sleeping:睡眠进程。
  • 0 stopped:停止的进程。
  • 0 zombie:僵尸进程数。

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处理时间的)。

内存使用
倒数第2、3行为内存相关信息,内存显示可以用m命令切换:

  • KiB Mem: 3881808 total, 153396 free:分别是物理内存总量、空闲内存总量。
  • 3577588 used, 150824 buff/cache:使用物理内存总量、用作内核缓存内存量。
  • KiB Swap: 4063228 total, 1206484 free:分别是交换分区总量、使用交换分区剩余量。
  • 2856744 used. 86344 avail Mem:可用来启动应用的内存(有些复杂,以后解释,恶意参考这里)。

字段/列
最后一行则是进程相关的资源占用信息:

  • PID:进程的ID,进程的唯一标识符。
  • USER:进程所有者的实际用户名。
  • PR:进程的优先级别,范围0-39,越小越优先被执行。
  • NI:nice值。范围-20-19,负值表示高优先级,正值表示低优先级。在top里,PR-NI=20,默认启动一个进程,nice是0。
  • VIRT:进程占用的虚拟内存。
  • RES:进程占用的物理内存。
  • SHR:进程使用的共享内存。
  • S:进程的状态。
    • D:表示不可终端的睡眠状态。
    • R:表示正在运行。
    • S:表示休眠。
    • T:表示作业控制信号下已停止。
    • t:表示在调试状态的停止。
    • Z:表示僵死状态。
  • %CPU:自从上一次更新到现在任务所使用的CPU使用率。
  • %MEM:进程使用的物理内存和总内存的百分比。
  • TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值,精确到百分之一秒。
  • COMMAND:进程启动命令名称。

交互命令实例

实例:h:帮助
描述:在top状态下,按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

实例:显示各个CPU负载
描述:在top状态下,按下“1”,可以显示每个CPU的负载情况。

1
2
3
4
5
6
7
8
top - 22:30:09 up 247 days,  7:00,  2 users,  load average: 0.16, 0.14, 0.14
Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3881808 total, 141164 free, 3578540 used, 162104 buff/cache
KiB Swap: 4063228 total, 1206756 free, 2856472 used. 79768 avail Mem

实例:手动刷新
描述:在top状态下,按空格或者回车进行手动刷新。top命令默认在一个特定间隔(3秒)后刷新显示。

实例:A:切换交替显示模式

描述:在top状态下,按A键,可以在全屏和交替模式间切换。在交替模式下会显示4个窗口。

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

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

可以用aw在4个窗口间切换,a移到后一个窗口,w移到前一个窗口。用g命令可以输入一个数字来选择当前窗口。

实例:B:粗体显示
描述:在top状态下,按B键,会将一些重要信息会以加粗字体显示。
输出:

实例:ds:设置显示的刷新间隔
描述:在top状态下,按d键或者s键,设置显示的刷新间隔为1秒。
输出:

实例:f:字段管理
描述:在top状态下,按f键进入字段管理界面。d键选择要显示的字段,用*标记的是已选择的。上下光标键在字段内导航,左光标键可以选择字段,右光标键进入排序状态,此时按上下光标键可以进行上下移动,回车确认。s键设置当前排序的字段,q或Esc键退出。
输出:

实例:R:反向排序
描述:在top状态下,按R键切换反向/常规排序。

实例:c:切换显示命令名称和完整命令行
描述:在top状态下,按c键,切换是否显示进程启动时的完整路径和程序名。也可以使用如下命令行。
命令:top -c
输出:

实例:i:空闲任务
描述:在top状态下,按i键,切换显示空闲任务。
输出:
不显示空闲任务:

实例:V:树视图
描述:在top状态下,按V键,切换树视图。
输出:

实例:z:切换彩色显示
描述:在top状态下,按z键,切换彩色,即打开或关闭彩色显示。
输出:

实例:Z:改变配色
描述:在top状态下,按Z键,显示一个改变top命令的输出颜色的屏幕。可以为8个任务区域选择8种颜色。
输出:
设置修改:

显示效果:

实例:按照内存使用大小排序
描述:在top状态下,按shift+m,可以按照内存使用大小排序进程。
输出:

实例:x、y:切换高亮信息
描述:在top状态下,按x键将排序字段高亮显示(纵列);按y键将运行进程高亮显示(横行)。
输出:

实例:u:特定用户的进程
描述:在top状态下,按u键将会提示输入用户名,输入首显示特定用户的进程。空白将会显示全部用户。
输出:

实例:n或#:任务的数量
描述:在top状态下,按n键或者#键可以设置最大显示的任务数量。
输出:

实例:k:结束任务
描述:在top状态下,按k键输入PID后,发送信号给任务(通常是结束任务)。
输出:

实例:r:重新设置优先级
描述:在top状态下,按r键输入-20~19范围中的数字后,重新设置一个任务的调度优先级(nice值)。
输出:

命令行实例

实例:-p:监控特定的PID
描述:-p选项监控指定的PID。PID的值为0将被作为top命令自身的PID。
命令:top -p 0

实例:-u或-U: 用户名或者UID
描述:可以用这些选项浏览特定用户的进程。用户名或者UID可以在选项中指定。-p、-u和-U选项是互斥的,同时只可以使用这其中一个选项。试图组合使用这些选项时,会得到一个错误:
命令:top -p 1248 -u root
输出:

实例:-b:批处理模式
描述:-b选项以批处理模式启动top命令,在文件中保存输出时是很有用的。

实例:-c:命令/程序名 触发:
描述:显示进程启动时的完整路径和程序名。

实例:-d:设置延迟间隔
描述:设置top的显示间隔(以秒计)。
命令:top -d 1

实例:-i:切换显示空闲进程
命令:top -i

实例:-n:特定重复次数后退出
描述:top输出保持刷新,直到按q键或者到达指定次数。下面的命令将在10次重复之后自动退出。
命令:top -n 10