top命令指南
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。它与ps命令的作用基本是相同的,都是显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态(默认每5秒刷新一次)。如果在前台执行top命令,它将独占前台终端,直到用户终止top命令为止(按q退出top监控环境)。
比较准确的说,top命令提供了实时的对系统处理器的状态监视,提供CPU的实时活动情况。它将显示系统中CPU最敏感的任务列表。该命令可以按CPU使用率、内存使用率和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。
top命令的语法格式
top [-s time] [-d count] [-q] [-h] [-n number] [-f filename] [-o field][-U usename]
top命令的选项
- -S
指定累计模式,将系统进程信息也显示到屏幕上,默认情况下,top不显示系统进程的信息 - -b
使用”batch”方式运行top。在此种方式下,所有来自终端的输入都将被忽略,但交互键(比如C and )
依然起使用。这是运行top输出到哑终端或输到非终端的默认运行方式 - -i
使用交互运行top程序,在此种方式下,命令会被进程立即被处理。不管命令是不是能被top所理解执行,屏幕都将立即更新。这是top的默认运行方式。 - -I
不显示空闲进程,在默认情况下,top连同空闲进程的信息一同输出。它使top不显示任何闲置或者僵死进程。 - -t
不显示top进程自己 - -n参数
不以交互方式使用top命令,即不进入top命令的交互环境中而直接输出,作用同batch方式。例如:top -b -n1 -cp pid - -s time
设置屏幕刷新的延时,单位为秒,默认值5秒。它使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 - -d count
指定每两次屏幕信息刷新之间的时间间隔,即设置屏幕刷新的次数,刷新显示完count次后退出。当然用户可以使用s交互命令来改变它值。 - -q
如果经过nice授权,使用-q可以使top运行的更快一些,这样,在系统反应缓慢的时候,可以会更快的找到存在的问题。该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 - -c
显示整个命令行而不只是显示命令名。因为top命令默认会将名字太长而不能在一行显示的命令截短 - -n number
设置每一屏幕显示的进程数目,number值超过进程最大数目,则设置无效 - -u
用显示User ID代替username,提高命令运行速度 - -v
显示程序版本号后,立即退出。如果要在top运行时查看版本号,输入? - -o
以指定的字段排序显示进行信息。字段名必须为输入在屏幕的可见列的名字,而且必须是小写。比如cpu、size、res与time,但不同的操作系统间有许多的不同。注意不是每个UNIX操作系统都支持此选项。 - -U
只显示属于后面所跟用户名的进程的信息 - -p
用于设置显示哪些进程数据的,后面跟进程的 id。如top -p pid
top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。
top命令的交互命令
交换方式下,可以使用以下命令控制top。下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
- ^L – Ctrl+L擦除并且重写屏幕
- 空格 – 立即刷新显示
- q – 退出top命令
- h or ? – 显示帮助画面,给出一些简短的命令总结说明
- d – 修改刷新显示的次数
- e – 显示最近kill或renice命令所产生的错误
- i – 显示/不显示处于空闲的进程,忽略闲置和僵死进程。这是一个开关式命令
- I – 作用同 i
- k – 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽
- n或者# – 修改显示进程的数目
- o或者O – 改变显示项目的顺序, 并以特定的字段排序 (pri, size, res, cpu, time)
- r – renice 一个进程,重新安排一个进程的优先级别
- s – 修改输入的更新时间,即改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
- u – 只显示属于某个用户的进程 (+ selects all users)
- S – 切换到累计模式
- f或者F – 从当前显示中添加或者删除项目
- l – 切换显示平均负载和启动时间信息
- m – 切换显示内存信息
- t – 切换显示进程和CPU状态信息
- c – 切换显示命令名称和完整命令行
- M – 根据驻留内存大小进行排序
- P – 根据CPU使用百分比大小进行排序
- T – 根据时间/累计时间进行排序
- W – 将当前设置写入~/.toprc文件中,这是写top配置文件的推荐方法
top命令的使用
从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。
键入top命令查看系统状况:
$ top top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 191272k total, 173656k used, 17616k free, 22052k buffers Swap: 192772k total, 0k used, 192772k free, 123988k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd 14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top 1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
从上得知,top命令顺序显示下面两个常规的信息(系统统计信息、进程信息列表):
- 系统信息
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。第一行
第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。01:06:48: 系统当前时间
up 1:22: 当前系统运行时间(启动时间),格式为时:分
1 user: 当前系统登录用户数
load average: 1分钟、5分钟和15分钟内运行的负载平均数
一般来说只要每个CPU的当前活动进程数不大于。3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。第二、三行
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。第二行表示最近一次更新时存在的进程总数,依次为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。其中第二行并分别列出run(运行)、sleep(睡眠)、idle(停止)和zomb(僵尸)状态的进程数。
第三行CPU state显示用户占用时间的百分比、系统占用CPU时间的百分比、被nice命令改变优先级的任务占用的CPU时间百分比、以及CPU空闲时间的百分比。(被nice命令改变优先级的任务仅指那些nice值为负的任务)。花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此整个时间加起来可能会超过百分之百。
字段含义:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si最后两行
第四、第五行分别显示内存信息和交换分区的信息。内存信息包括内存使用情况的统计,包括实际(real)内存的活动值/总值,虚拟(virtual)内存的使用值/总值,剩余的内存。具体是:第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。
字段含义
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。 - 进程信息
统计进程信息区域的下方显示了各个进程的详细信息,它列出系统里每一个处理器的信息,当信息在一个屏幕内无法显示时,会被分成多个屏幕显示,可以前面提到l,k和t命令查看。首先来认识一下各列的含义:
*CPU:处理器号(仅当多处理器系统时列出)
*TTY:启动进程的终端名。不是从终端启动的进程则显示为?符号
*PID:进程号
*PPID:父进程号
*USER/RUSER:进程所有者的用户名
*UID:进程所有者的用户ID
*GROUP:进程所有者的组名
*PRI/PR:任务/进程的优先级
*i NI NICE值:任务的nice值,负值表示高优先级,正值表示低优先级。一个具有较低值的进程在系统上将具有优先权。可以通过改变nice值提高某些进程速度,但是这实际上是一种交易,因为那些nice值被升高的进程此时将运行得很慢。
*j P:最后使用的CPU,仅在多CPU环境下有意义
*k %CPU:上次更新到现在的CPU时间占用百分比,是进程的原始的CPU利用率百分比,自上一次屏幕刷新以来任务占用CPU 时间的份额
*l TIME 进程使用的CPU时间总计(自进程开始时使用的总CPU时间),单位秒,如153:43,对应是153秒43毫秒
*m TIME+:进程使用的CPU时间总计,单位1/100秒
*n %MEM:进程使用的物理内存百分比
*o VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
*p SWAP:进程使用的虚拟内存中,被换出的大小,单位kb
*q RES 进程使用的、未被换出的物理内存大小,即任务使用的物理内存的总数量,单位kb。RES=CODE+DATA
*t SHR:共享内存大小,单位kb
*w S STATE:进程状态
*--有如下几种状态
*---D=不可中断的睡眠状态
*---R=运行
*---S=睡眠
*---T=跟踪/停止
*---Z=僵尸进程
*r CODE:可执行代码占用的物理内存大小,单位kb
*s DATA:可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
*u nFLT:页面错误次数
*v nDRT:最后一次写入到现在,被修改过的页面数
*x COMMAND:命令名/命令行,启动进程的命令名。如果名字太长而不能在一行显示时,它将被截短
*SIZE:任务的代码加上数据再加上栈空间的大小。
*%WCPU:进程的CPU利用率权重百分比
*y WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
*z Flags:任务标志,参考 sched.h默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容
通过f键可以选择显示的内容。按f键之后会显示列的列表,按a-z即可显示或隐藏对应的列,最后按回车键确定。按o键可以改变列的显示顺序。按小写的a-z可以将相应的列向右移动,而大写的A-Z可以将相应的列向左移动。最后按回车键确定。
按大写的F或O键,然后按a-z可以将进程按照相应的列进行排序。而大写的R键可以将当前的排序倒转。
Monitor Your Web Site 24/7 - Receive email and SMS alerts anytime your web site goes down.
