Linux命令之top
top –hv | -abcHimMsS –d delay –n iterations –p pid [, pid …]
top程序提供运行系统的动态实时视图,它可以显示系统概要信息以及当前由Linux内核当前管理的任务列表。所示的系统概要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的,并且可以在重新启动时使配置保持不变。
该程序为流程操作提供了有限的交互借口,并未个人配置提供了更广泛的接口——包括其操作的各个方面。虽然在整个文档中引用了Top,但是您可以随意命名任何您希望的程序。新的名称,可以是别名,将在顶部的显示器上反映出来,并在读取和写入配置文件时使用。
(1).top中一些字段的含义
VIRT:virtual memory usage虚拟内存
1、 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、 假如进程申请100M的内存,但实际只使用了10M,那么它会增长到100M,而不是实际用的量
RES:resident memory usage常驻内存
1、 进程当前使用的内存大小,但不包括swap out
2、 包含其他进程的共享
3、 如果申请100M内存,实际使用10M,它只增长10M,与VIRT相反
4、 关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory共享内存
1、 除了自身进程的共享内存,也包括其他进程的共享内存
2、 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、 计算摸个进程所占的物理内存公式:RES-SHR
4、 Swap out后,他将会降下来
DATA
1、数据占用的内存。如果投票没有显示,按f键可以显示出来
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
(2).选项
-a 按内存使用情况排序。此开关最重要的是按分配内存对进程进行排序。 -b 批处理模式操作。在批处理模式中启动top,这可以用于将输出从top发送到其他程序或文件。在此模式下,top将不接受输入和运行,直到您使用’-n’命令行选项设置的限制迭代次数或直到被杀死。 -c 命令行/程序名称切换。启动top反转(切换)最后记住的’c’状态。因此,如果top显示命令行,那么现在该字段显示程序名称,反之亦然。 -d 延迟时间间隔为:-d ss.tt(单位秒,允许小数,不允许负数)。指定屏幕更新之间的延迟,并重写个人配置文件或启动默认值中相应值。之后可以使用’d’或’s’交互命令来更改这一点。安全模式下只有root可以更改此类(除非使用’s’命令行选项) -h 帮助信息 -H线程切换。启动top反转(切换)最后记住的’H’状态。当切换到On时,将显示所有淡出的线程。否则,top显示进程中所有线程的总和。 -i 空闲进程切换。启动top反转(切换)最后记住的’i’状态。当此切换为Off时,将不在显示空闲或僵尸任务 -m VIRT/USED切换。报告被使用的(进程RSS总数和交换总数),而不是虚拟内存。 -M 检测内存单元。显示内存单元(k/M/G)并在内存摘要中显示浮点数 -n 迭代次数限制为:-n number。指定在结束前应该产生的最大迭代次数或帧数。 -p 监视器PID为:-pN1 –pN2 …或-pN1,N2[,…]。仅监视具有指定进程ID的进程。此选项最多可以给出20次,或者您可以提供最多20个PID的逗号分隔列表。混合这两种方法是运行的。如果您希望恢复正常操作,只需要发出’=’交互命令。 -s 安全模式操作。强制启动安全模式,即使是root。通过系统配置文件可以更好地控制此模式。 -S 累计时间模式切换。启动top反转(切换)最后记住的’S’状态。当累计模式为On,每个进程都会列出它和它的死子进程使用的CPU时间。 -u 用户监控:-u somebody。仅监控与给定的有效UID或用户名匹配的进程 -U 用户监控:-U somebody。仅监控与给定的UID或用户名匹配的进程。这与真实的、有效的、保存的文件系统UID相匹配。 -v 版本信息
(3).交互命令
注意:以下绿色交互命令比较常用
1)全局命令
<回车>/<空格> 刷新显示
?/h 帮助
= 退出任务限制。删除显示任务的限制。此命令将逆转可能处于活动状态的任何’i’(空闲任务)和’n’(最大任务命令。)它还提供PID监控的’退出’。
A 备用显示模式切换。此命令将在全屏模式和更改显示模式之间切换
B 粗体禁用/启用切换。此命令将影响“粗体”终端功能的使用,并改变当前窗口的摘要区和任务区(注意:当这个切换为On,并且top在单色模式下运行时,整个显示将显示为普通文本。因此除非’x’或’y’切换使用反向强调,否则将没有视觉上的证明它们是On的。)
d/s 更改延迟时间间隔。系统将提示您输入显示更新之间的延迟时间(单位秒)。小数秒是值得的,但不允许使用负数。输入0导致几乎连续更新,显示不令人满意,因为系统和tty驱动程序视图满足最高要求。延迟值与系统负载成反比,因此谨慎设置。如果您希望在任何时候知道当前的延迟时间,只需寻求帮助并在第二行查看系统摘要。
G 选择另一个窗口或字段组。系统将提示您输入1到4之间的数字,指定窗口/字段组,该窗口/字段组应该成为“当前”窗口。
I Irix/Solaris模式切换。在“Solaris模式”(’I’切换为关闭)下运行时,任务的CPU使用率将除以CPU的总数。发出此命令后,您将被告知此切换的新状态。
u 选择一个用户。系统将提示您输入UID或用户名。仅显示属于所选用户的进程。此选项与有效UID匹配
U 选择一个用户。系统将提示您输入UID或用户名。仅显示属于所选用户的进程。此选项匹配真实的、有效的、保留的和文件系统的UID
k 杀死一个任务(进程)。系统将提示您输入PID,然后输入要发送的信号。如提示中反映的默认信号是SIGTERM。但是,您可以通过号码或姓名发送任何信号。如果您希望停止杀死进程,可以在PID提示下,按下<Enter>;也可以在信号提示时,按下0。
q 退出
r 重新nice一个任务。系统将提示您输入PID,然后输入一个nice值给它。输入正值将导致进程失去优先级。相反,负值将导致进程更容易被内核查看。
W 编写配置文件。这将保存所有选项和切换以及当前显示模式和延迟。通过在退出top前发出此命令,您可以稍后在完全相同的状态下重新启动。
Z 更改颜色映射。此键将带您进入一个单独的屏幕,您可以在其中更改当前窗口或所有窗口的颜色
注意:蓝色字体的命令在安全模式下不可用,也不会显示在1级帮助屏幕上。
2)摘要区命令
l Load Average/Uptime的开关。下图显示的红色的那一行。
m Memory/Swap Usage的开关。下图显示的红色的两行
注意:在CentOS7中,m变得更加多样,更加直观
t Task/CPU States的开关。下图显示的红色区域。如果使用了1命令,CPU States行可能是多行。
注意:在CentOS7中,t变得更加多样,更加直观
1 整个/分隔CPU状态的开关。下图显示了两个之间的不同之处。
注意:如果已将任何窗口的整个摘要区域切换为关闭,则只剩下消息行。这样您将拥有最大化的可用任务行,但在交替显示模式下暂时牺牲了全屏模式下的程序名称或当前窗口名称。
3)任务区命令
1.任务窗口外观
b 粗体开关。这个命令影响x和y命令的显示。并且只有这两个命令有一个打开才可用。
x 列高亮开关。更改当前排序字段的高亮。
y 行高亮开关。更改正在运行的任务(进程)的高亮。
z 彩色/单色开关。当前窗口颜色在最后使用的配色,白底黑字,黑底白字之间切换。,此命令改变摘要区和任务区,但不影响x,y,b命令。
2.任务窗口内容
c 命令行/程序名切换。无论’Command’是否存在,都需要遵循。
H 线程开关。当此开关打开时,将显示所有单独的线程。否则,顶部显示进程中所有线程的总和。
S 累计时间模式开关。当累计模式打开时,每个进程都列出它和它死去的子进程所使用的cpu时间。当关闭时,分出许多独立任务的程序将显得要求不高。对于像“init”或shell这样的程序是合适的,但对于其他的,比如编译器,或许不是。尝试两个任务窗口共享相同的排序字段,但使用不同的’S’状态,看看你喜欢哪一个表达。发出此命令后,您将被告知此开关的新状态。如果你像提前知道累计模式是否有效,只需寻求帮助并查看第二行的窗口摘要。
u 仅显示特定用户。将提示您输入要显示的用户名称。此后在该任务窗口中只显示用户ID或可能不会显示任何任务。稍后如果您希望再次监视所有任务,请重新发布此命令,但只需在提示处按<Enter>,而不是提供名称。
3.任务窗口大小
i 空闲进程开关。显示所有任务或只是活动任务。当此开关关闭时,将不会显示空闲或僵尸进程。如果在交替显示模式下将该命令应用到最后一个任务显示,那么它将不会影响窗口的大小,因为所有先前的任务显示都已被绘制过。
n/# 设置最大任务。系统将提醒您输入要显示的任务数。在交替显示模式下使用时,这个命令可以精确控制每个当前可见任务显示的大小,最后一个除外。它不会影响最后一个窗口的大小,因为所有先前的任务显示都已经被绘制。
注意:如果您希望在交替显示模式下增加上次可见任务显示的大小,只需减小其上方任务显示的大小。
4.任务窗口排序
在使用下面的排序规则前,top建议您使用’x’交换命令临时打开列高亮显示。这将有助于实际的排序环境符合您的意图。只有当前排序字段可见时,才会满足以下交互命令。排序字段不可见的原因可能是:屏幕宽度不够;’f’交互命令关闭。
< 选择当前排序字段的左边一位为新的排序字段。
> 选择当前排序字段的右边一位为新的排序字段。
f/F 选择排序字段。所有字段将会显示一个单独的屏幕,字段前方有*表示正在显示,并且显示当前的排序字段以及操作帮助。上下键选择,左右键以及<Enter>键排序(右键选中整个字段,然后上下键移动,最后使用左键或<Enter>键退出字段排序),s键确认,d键或<Space>键开关字段是否显示,q键或<Esc>键退出。
M 按%MEM排序
N 按PID排序
P 按%CPU排序
T 按TIME+排序
R 反向/正常排序字段切换。使用此交互命令,您可以在从高到底或从低到高的排序之间切换。
注意:字段排序使用内部值,而不是列显示中的值。因此,TTY和WCHAN字段将违反严格的ASCII排序顺序。
4)颜色映射
当您发出’Z’交互命令时,您将看到一个单独的屏幕。在返回top显示前,该屏幕可用于更改当前窗口或所有窗口的颜色。在这个单独的屏幕中显示4个大写字母选择目标,8个数字选择颜色。同时还有B表示加粗的开关,b表示运行任务粗体开关,z表示颜色/单色的切换,<Enter>表示应用并退出,a/w表示申请和转到下一个/上一个,q表示放弃更改并退出。
(4).实例
[root@CentOS6 桌面]# top top - 02:18:19 up 10:07, 3 users, load average: 0.79, 0.70, 0.65 Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie Cpu(s): 2.8%us, 1.5%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1907300k total, 1127804k used, 779496k free, 54300k buffers Swap: 4095996k total, 0k used, 4095996k free, 407984k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2053 root 20 0 243m 76m 13m S 13.6 4.1 5:59.58 Xorg 2665 root 20 0 348m 18m 11m S 11.0 1.0 1:03.91 gnome-terminal 2739 root 20 0 1252m 289m 53m S 7.3 15.5 25:59.39 firefox 4 root 20 0 0 0 0 S 0.3 0.0 0:01.53 ksoftirqd/0 5486 root 20 0 15032 1288 936 R 0.3 0.1 0:00.09 top 1 root 20 0 19352 1548 1228 S 0.0 0.1 0:02.38 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.44 migration/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.09 watchdog/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.08 migration/1 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1 9 root 20 0 0 0 0 S 0.0 0.0 0:01.17 ksoftirqd/1 10 root RT 0 0 0 0 S 0.0 0.0 0:00.19 watchdog/1 11 root 20 0 0 0 0 S 0.0 0.0 0:22.94 events/0 12 root 20 0 0 0 0 S 0.0 0.0 0:04.39 events/1 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
摘要区字段解析:
1)任务行信息,同uptime命令的执行结果
top - 02:18:19 当前系统时间,会随着屏幕更新而更新
up 10:07 系统持续运行时间,hh:mm(小时:分钟)
3 users 3个用户
load average: 0.79, 0.70, 0.65 系统负载,即任务列表的平均长度
2)任务(进程)
Tasks:174 total 总进程数
1 running 正在运行的进程数
173 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
3)CPU状态信息
Cpu(s): 2.8%us 用户进程占用CPU百分比
1.5%sy 内核进程占用CPU百分比
0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
95.7%id 空闲CPU百分比
0.0%wa 等待I/O(输入输出)完成的时间
0.0%hi(了解) 维护硬中断(Hardware IRQ)所花费的时间。硬中断是由硬件产生的,比如磁盘、网卡、键盘、时钟等。每个设备或设备集都有自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上。注:硬件驱动通常是内核中的一个子程序,而不是独立的进程。
0.0%si(了解) 维护软中断(Software Interrupts)所花费的时间。通常软中断是一些对I/O(输入输出)请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度,过程通常和磁盘I/O的方式相同。
0.0%st 虚拟机偷取物理的时间。比如:物理机已经运行了KVM,XEN虚拟机。KVM虚拟机占用物理机CPU的时间。
4)内存信息
Mem: 1907300k total 物理内存总量
1127804k used 已使用的物理内存总量
779496k free 空闲内存总量
54300k buffers 缓存的内存量
5)swap交换分区信息
Swap: 4095996k total 交换区总量
0k used 使用的交换区总量
4095996k free 空闲的交换区总量
407984k cached 缓存的交换区总量,即可用交换区内存
注意1:在CentOS7中,buffers和cached合并为buffers/cached。并且多出一个avail Mem总的可利用内存。
注意2:4)和5)还可以使用free命令直接查看
注意3:如果swap分区被使用,那么表明内存不够用了。
任务(进程)区字段解析:
PID 进程ID。任务的唯一进程ID,它周期性封装,但不会从0开始启动 PPID 父进程ID。任务的父进程ID RUSER 真正的用户名。任务所有者的真实用户名 UID 用户ID。任务所有者有效的用户ID USER 用户名。任务所有者的有效用户名 GROUP 组名。任务所有者的有效组名 TTY 控制终端。控制终端的名称。它通常是启动进程的设备(串行接口,PTY虚拟终端等),用于输入输出。然而,任务不必与终端联系,这时你会看到显示的是’?’ PR 优先级。任务的优先级 NI nice值。任务的nice值。一个负的nice值意味着更高的优先级,而一个正的nice值意味着较低的优先级。在这个字段中0意味着在确认任务的调度时不会调整优先级。 P 最后使用的CPU,仅在多CPU环境下有意义。 %CPU CPU的使用。任务在上次屏幕刷新后经过的CPU时间占总CPU时间的百分比。 TIME CPU时间(单位秒)。任务自启动以来使用的总CPU时间。当’累计模式’为On时,每个进程将列出其及其死亡的子进程使用的CPU时间。 TIME+ CPU时间,百分之一秒。与TIME相同但精确到百分位。 %MEM 内存使用量(RES)。任务当前使用的可用物理内存份额(百分比) VIRT 虚拟镜像(单位kb)。任务所使用的虚拟内存总量。它包括所有代码、数据和共享库以及已被交换的页面。VIRT=SWAP+RES(注意你可以定义环境变量STATSIZE=1,VIRT将从proc/#/status VmSwap字段计算。(这时只有SWAP了)) SWAP 交换内存(单位kb)。每个进程交换值取自proc/#/status VmSwap RES 常驻内存(单位kb)。一个任务使用的非交换物理内存。RES=CODE+DATA CODE 代码大小(单位kb)。专用于可执行代码的物理内存量,也称为’文本驻留集’大小或TRS。 DATA 数据+栈大小(单位kb)。除了可执行代码之外的物理内存量,也称为’数据驻留集’大小或DRS。 SHR 共享内存大小(单位kb)。任务使用的共享内存量。它只是反映了可能与其他进程共享的内存。 nFLT 页面错误计数。任务发生的主要页面错误数。当进程尝试读取或写入当前不存在于其地址空间中的虚拟页面时,会发生页面错误。一个主要页面错误是在使该页面可用时涉及磁盘访问。 nDRT 脏页计数。自上次写入磁盘以来被修改的页面数。必须先将脏页写入磁盘,然后才能将相应的物理内存位置用于其他虚拟页面。 S 进程状态。D=不间断睡眠,R=正在运行,S=睡眠,T=追踪或停止,Z=僵尸(进程)。显示为正在运行的任务应该更恰当地被认为是准备运行——它们的task_struct只是在Linux运行队列中表示。甚至没有真正的SMP机器,你也能会在此状态下看到许多任务,这具体取决于top的延迟间隔和nice值。 Command 命令行或程序名。显示用于启动任务的命令行或相关程序名称。您可以使用’c’在命令行和名称之间切换,它即是命令行选项,又是交互式命令。 WCHAN 睡眠中的功能。根据内核链接映射(’Stase.map’)的可用性,这个字段将显示任务当前正在休眠的内核函数的名称或地址。运行的任务将在本专栏中显示一个破折号(’-’)。 Flags 任务标志。此列表示任务的当前调度标志,以十六进制符号表示,并且包含0。这些标志在<linux/sched.h>中正式记录。也可以在“字段选择”和“订单字段”屏幕上找到不太正式的文档。
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 几个列!
(5).扩展
1).在Linux系统中一个进程最多可以使用100%CPU吗?
答案是可以的,比如说4核的CPU,那么上限是400%。