转载于:http://bian5399.blog.51cto.com/3848702/834715
性能调优的主要目的是使系统能够有效的利用各种资源,最大的发挥应用程序和系统之间的性能融合,使应用高效、稳定的运行。但是,衡量系统资源利用率好坏的标准没有一个严格的定义,针对不同的系统和应用也没有一个统一的说法,因此,这里提供的标准其实是一个经验值,表15.1给出了判定系统资源利用状况的一般准则: 表1给出了判定系统资源利用状况的一般准则:
表1
其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU处在系统模式下的时间百分比。 %iowait:表示CPU等待输入输出完成时间的百分比。 swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。 swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。
linux下性能分析工具还有很多,例如uptime可以检查CPU的平均负载,free可以查看系统内存的使用状况,ps、top可以配合监控系统的进程运行状态,netstat可以监测网络流量状况
例如,linux系统下的一个网站系统,用户反映,网站访问速度很慢,有时无法访问。 针对这个问题,第一步要做的是检测网络,可以通过ping命令检查网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,通过这种方式,首先排除网络可能出现的问题;如果网络没有问题,接着进入第二步,对linux系统的内存使用状况进行检查,因为网站响应速度慢,一般跟内存关联比较大,通过free、vmstat等命令判断内存资源是否紧缺,如果内存资源不存在问题,进入第三步,检查系统CPU的负载状况,可以通过sar、vmstat、top等命令的输出综合判断CPU是否存在过载问题,如果CPU没有问题,继续进入第四步,检查系统的磁盘I/O是否存在瓶颈,可以通过iostat、vmstat等命令检查磁盘的读写性能,如果磁盘读写也没有问题,linux系统自身的性能问题基本排除,最后要做的是检查程序本身是否存在问题。通过这样的思路,层层检测,步步排查,性能问题就“无处藏身”,查找出现性能问题的环节也就变得非常简单。
1、vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之处是无法对某个进程进行深入分析。 vmstat使用语法如下: vmstat [-V] [-n] [delay [count]] 各个选项及参数含义如下: l -V:表示打印出版本信息,是可选参数。 l -n:表示在周期性循环输出时,输出的头部信息仅显示一次。 l delay:表示两次输出之间的间隔时间。 l count:表示按照“delay”指定的时间间隔统计的次数。默认为1。 例如: vmstat 3 表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。 vmstat 3 5 表示每3秒更新一次输出信息,统计5次后停止输出。
下面是vmstat命令在某个系统的输出结果: [root@node1 ~]# vmstat 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0 0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0 0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0 对上面每项的输出解释如下: procs r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。 b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。 memory swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。 free列表示当前空闲的物理内存数量(以k为单位) buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。 cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。 swap si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。 so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。 一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。 IO项显示磁盘读写状况 Bi列表示从块设备读入数据的总量(即读磁盘)(每秒kb)。 Bo列表示写入到块设备的数据总量(即写磁盘)(每秒kb) 这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。 system 显示采集间隔内发生的中断数 in列表示在某一时间间隔中观测到的每秒设备中断数。 cs列表示每秒产生的上下文切换次数。 上面这2个值越大,会看到由内核消耗的CPU时间会越多。 CPU项显示了CPU的使用状态,此列是我们关注的重点。 us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。 sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。 根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。 id 列显示了CPU处在空闲状态的时间百分比。 wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明IO等待越严重,根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)。 综上所述,在对CPU的评估中,需要重点注意的是procs项r列的值和CPU项中us、sy和id列的值。
2、sar命令
sar命令很强大,是分析系统性能的重要工具之一,通过sar指令,可以全面的获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。 sar使用格式为: sar [options] [g1] [-o filename] [interval [count] ] 各个选项及参数含义如下: l options 为命令行选项,sar命令的选项很多,下面只列出常用选项: Ø -A:显示系统所有资源设备(CPU、内存、磁盘)的运行状况。 Ø -u:显示系统所有CPU在采样时间内的负载状态。 Ø -P:显示当前系统中指定CPU的使用情况。 Ø -d:显示系统所有硬盘设备在采样时间内的使用状况。 Ø -r:显示系统内存在采样时间内的使用状况。 Ø -b:显示缓冲区在采样时间内的使用情况。 Ø -v:显示进程、文件、I节点和锁表状态。 Ø -n:显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示三个所有的信息。它们可以单独或者一起使用。 Ø -q:显示了运行队列的大小,它与系统当时的平均负载相同。 Ø -R:显示进程在采样时间内的活动情况。 Ø -y:显示终端设备在采样时间内的活动情况。 Ø -w:显示系统交换活动在采样时间内的状态。 l -o filename:表示将命令结果以二进制格式存放在文件中,filename是文件名。 l interval:表示采样间隔时间,是必须有的参数。 l count:表示采样次数,是可选参数,默认值是1。 例如: 要查看系统CPU的整体负载状况,每3秒统计一次,统计5次,可以使用以下组合: sar –u 3 5 系统的CPU计数是从0开始的,如果要查看第二颗CPU的运行负载,使用下面组合: sar –P 1 3 5 要查看系统磁盘的读写性能,使用以下组合: sar -d 3 5 同理,查看系统内存使用情况、网络运行状态,可以分别使用下面命令: sar -r 5 2 sar -n DEV 5 3
下面是sar命令对某个系统的CPU统计输出: [root@webserver ~]# sar -u 3 5 Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)
11:41:24 AM CPU %user %nice %system %iowait %steal %idle 11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83 11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50 11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92 11:41:36 AM all 0.29 0.00 0.13 0.00 0.00 99.58 11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41 Average: all 0.34 0.00 0.16 0.05 0.00 99.45 对上面每项的输出解释如下: %user列显示了用户进程消耗的CPU 时间百分比。 %nice列显示了运行正常进程所消耗的CPU 时间百分比。 %system列显示了系统进程消耗的CPU时间百分比。 %iowait列显示了IO等待所占用的CPU时间百分比 %steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。 %idle列显示了CPU处在空闲状态的时间百分比。 这个输出是对系统整体CPU使用状况的统计,每项的输出都非常直观,并且最后一行Average是个汇总行,是上面统计信息的一个平均值。 需要注意的一点是:第一行的统计信息中包含了sar本身的统计消耗,所以%user列的值会偏高一点,不过,这不会对统计结果产生多大影响。 在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致 了整体CPU使用率不高,而应用缓慢 现象的发生 。 针对这个问题,可以对系统的每个CPU分开查询,统计每个CPU的使用情况: [root@webserver ~]# sar -P 0 3 5 Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
06:29:33 PM CPU %user %nice %system %iowait %steal %idle 06:29:36 PM 0 3.00 0.00 0.33 0.00 0.00 96.67 06:29:39 PM 0 0.67 0.00 0.33 0.00 0.00 99.00 06:29:42 PM 0 0.00 0.00 0.33 0.00 0.00 99.67 06:29:45 PM 0 0.67 0.00 0.33 0.00 0.00 99.00 06:29:48 PM 0 1.00 0.00 0.33 0.33 0.00 98.34 Average: 0 1.07 0.00 0.33 0.07 0.00 98.53 这个输出是对系统的第一颗CPU的信息统计,需要注意的是,sar中对CPU的计数是从0开始的,因此,“sar -P 0 3 5”表示对系统的第一颗CPU进行信息统计,“sar -P 4 3 5”则表示对系统的第五颗CPU进行统计。依次类推。可以看出,上面的系统有八颗CPU。
通过sar –n组合显示系统的网络运行状态 sar提供四种不同的选项来显示网络统计信息,通过“-n”选项可以指定4个不同类型的开关:DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息,FULL显示所有三个开关。请看下面的一个输出: [root@webserver ~]# sar -n DEV 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)
02:22:31 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:22:33 PM lo 31.34 31.34 37.53 37.53 0.00 0.00 0.00 02:22:33 PM eth0 199.50 279.60 17.29 344.12 0.00 0.00 0.00 02:22:33 PM eth1 5.47 4.98 7.03 0.36 0.00 0.00 0.00 02:22:33 PM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:33 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:22:35 PM lo 67.66 67.66 74.34 74.34 0.00 0.00 0.00 02:22:35 PM eth0 159.70 222.39 19.74 217.16 0.00 0.00 0.00 02:22:35 PM eth1 3.48 4.48 0.44 0.51 0.00 0.00 0.00 02:22:35 PM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:22:35 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:22:37 PM lo 4.52 4.52 9.25 9.25 0.00 0.00 0.00 02:22:37 PM eth0 102.51 133.67 20.67 116.14 0.00 0.00 0.00 02:22:37 PM eth1 27.14 67.34 2.42 89.26 0.00 0.00 0.00 02:22:37 PM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: lo 34.61 34.61 40.48 40.48 0.00 0.00 0.00 Average: eth0 154.08 212.15 19.23 226.17 0.00 0.00 0.00 Average: eth1 11.98 25.46 3.30 29.85 0.00 0.00 0.00 Average: sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 对上面每项的输出解释如下: IFACE表示网络接口设备。 rxpck/s表示每秒钟接收的数据包大小。 txpck/s表示每秒钟发送的数据包大小。 rxkB/s表示每秒钟接收的字节数。 txkB/s表示每秒钟发送的字节数。 rxcmp/s表示每秒钟接收的压缩数据包。 txcmp/s表示每秒钟发送的压缩数据包。 rxmcst/s表示每秒钟接收的多播数据包。 通过“sar –n”的输出,可以清楚的显示网络接口发送、接收数据的统计信息。此外还可以通过“sar -n EDEV 2 3”来统计网络错误信息等
3、iostat命令
iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视。它的输出主要显示磁盘读写操作的统计信息,同时也会给出CPU使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 iostat一般都不随系统安装,要使用iostat工具,需要在系统上安装一个Sysstat的工具包,Sysstat是一个开源软件,官方地址为http://pagesperso-orange.fr/sebastien.godard 可以选择源代码包或rpm包的方式安装,这里不在讲述安装过程,安装完毕,系统会多出3个命令:iostat、sar和mpstat。然后就可以直接在系统下运行iostat命令了。 iostat使用语法如下: iostat [ -c | -d ] [ -k ] [ -t ] [ -x [ device ] ] [ interval [ count ] ] 各个选项及参数含义如下: -c:显示CPU的使用情况。 -d:显示磁盘的使用情况。 -k:每秒以k bytes为单位显示数据。 -t:打印出统计信息开始执行的时间。 -x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。 interval:指定两次统计间隔的时间; count:按照“interval”指定的时间间隔统计的次数。
看下面的一个输出: [root@webserver ~]# iostat -c Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 2.52 0.00 0.30 0.24 0.00 96.96 在这里,我们使用了“-c”参数,只显示系统CPU的统计信息,输出中每项代表的含义与sar命令的输出项完全相同
通过“iostat –d”命令组合也可以查看系统磁盘的使用状况,请看如下输出: [root@webserver ~]# iostat -d 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.87 2.58 114.12 6479462 286537372
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.00 0.00 12.00 0 24 对上面每项的输出解释如下: Blk_read/s表示每秒读取的数据块数。 Blk_wrtn/s表示每秒写入的数据块数。 Blk_read表示读取的所有块数 Blk_wrtn表示写入的所有块数。 这里需要注意的一点是:上面输出的第一项是系统从启动以来到统计时的所有传输信息,从第二次输出的数据才代表在检测的时间段内系统的传输值。 可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。 “iostat –x”组合还提供了对每个磁盘的单独统计,如果不指定磁盘,默认是对所有磁盘进行统计,请看下面的一个输出: [root@webserver ~]# iostat -x /dev/sda 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 2.45 0.00 0.30 0.24 0.00 97.03
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.01 12.48 0.10 1.78 2.58 114.03 62.33 0.07 38.39 1.30 0.24
avg-cpu: %user %nice %system %iowait %steal %idle 3.97 0.00 1.83 8.19 0.00 86.14
Device:rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 195.00 0.00 18.00 0.00 1704.00 94.67 0.04 2.50 0.11 0.20
avg-cpu: %user %nice %system %iowait %steal %idle 4.04 0.00 1.83 8.01 0.00 86.18
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 4.50 0.00 7.00 0.00 92.00 13.14 0.01 0.79 0.14 0.10 这个输出基本与“sar –d”相同,需要说明的几个选项的含义为: rrqm/s表示每秒进行merged的读操作数目。 wrqm/s表示每秒进行 merge 的写操作数目。 r/s表示每秒完成读I/O设备的次数。 w/s表示每秒完成写I/O设备的次数。 rsec/s表示每秒读取的扇区数。 wsec/s表示每秒写入的扇区数。
4、free命令
free是监控linux内存使用状况最常用的指令,看下面的一个输出: [root@webserver ~]# free -m total used free shared buffers cached Mem: 8111 7185 925 0 243 6299 -/+ buffers/cache: 643 7468 Swap: 8189 0 8189 “free –m”表示以M为单位查看内存使用情况,在这个输出中,我们重点关注的应该是free列与cached列的输出值,由输出可知,此系统共8G内存,系统空闲内存还有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系统缓存了很多的文件和目录,而对于应用程序来说,可以使用的内存还有7468M,当然这个7468M包含了Buffer Cache和Page Cache的值。在swap项可以看出,交换分区还未使用。所以从应用的角度来说,此系统内存资源还非常充足。 一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。 free命令还可以适时的监控内存的使用状况,使用“-s”参数可以在指定的时间段内不间断的监控内存的使用情况: [root@webserver ~]# free -b -s 5 total used free shared buffers cached Mem: 8505901056 7528706048 977195008 0 260112384 6601158656 -/+ buffers/cache: 667435008 7838466048 Swap: 8587149312 163840 8586985472
total used free shared buffers cached Mem: 8505901056 7526936576 978964480 0 260128768 6601142272 -/+ buffers/cache: 665665536 7840235520 Swap: 8587149312 163840 8586985472
total used free shared buffers cached Mem: 8505901056 7523987456 981913600 0 260141056 6601129984 -/+ buffers/cache: 662716416 7843184640 Swap: 8587149312 163840 8586985472 其中,“-b”表示以千字节(也就是1024字节为单位)来显示内存使用情况。
5、uptime命令
uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。看下面的一个输出: [root@webserver ~]# uptime 18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08 这里需要注意的是load average这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。
6、netstat命令
通过netstat –i组合检测网络接口状况 netstat命令提供了网络接口的详细信息,请看下面的输出: [root@webserver ~]# netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 1313129253 0 0 0 1320686497 0 0 0 BMRU eth1 1500 0 494902025 0 0 0 292358810 0 0 0 BMRU lo 16436 0 41901601 0 0 0 41901601 0 0 0 LRU 对上面每项的输出解释如下: Iface表示网络设备的接口名称。 MTU表示最大传输单元,单位字节。 RX-OK/TX-OK表示已经准确无误的接收/发送了多少数据包。 RX-ERR/TX-ERR表示接收/发送数据包时产生了多少错误。 RX-DRP/TX-DRP表示接收/发送数据包时丢弃了多少数据包。 RX-OVR/TX-OVR表示由于误差而遗失了多少数据包。 Flg表示接口标记,其中: L:表示该接口是个回环设备。 B:表示设置了广播地址。 M:表示接收所有数据包。 R:表示接口正在运行。 U:表示接口处于活动状态。 O:表示在该接口上禁用arp。 P:表示一个点到点的连接。 正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。 当网络传输存在问题是,可以检测网卡设备是否存在故障,如果可能,可以升级为千兆网卡或者光纤网络,还可以检查网络部署环境是否合理。 4.3 通过netstat –r组合检测系统的路由表信息 在网络不通,或者网络异常时,首先想到的就是检查系统的路由表信息,“netstat –r”的输出结果与route命令的输出完全相同,请看下面的一个实例: [root@webserver ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.10.1.0 * 255.255.255.0 U 0 0 0 eth0 192.168.200.0 * 255.255.255.0 U 0 0 0 eth1 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 default 10.10.1.254 0.0.0.0 UG 0 0 0 eth0 关于输出中每项的具体含义,已经在前面章节进行过详细介绍,这里不再多讲,这里我们重点关注的是default行对应的值,default项表示系统的默认路由,对应的网络接口为eth0。
7、top命令
top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定
说明:前五行都统计系统整体信息的 下面是进程信息区 第一行: 跟uptime 一样,分别是当前时间13:48 系统运行时间3 days 当前登录用户数1user 系统负载load average:,即任务队列的平均长度
2 第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行 Tasks: 96 total 进程总数 1 running 正在运行的进程数 95 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数
Cpu(s): 0.0% us 用户空间占用CPU百分比 查看CPU使用率 1.0% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 100.0% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0% hi 0.0% si 0.0% st
3 最后两行为内存信息 Mem:506708k total 物理内存总量 477080k used 使用的物理内存总量 29628k free 空闲内存总量 113736k buffers 用作内核缓存的内存量 Swap: 1015800k total 交换区总量 112 used 使用的交换区总量 1015688k free 空闲交换区总量 169384k cached 缓冲的交换区总量 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。 相应的内存再次被换出时可不必再对交换区写入。
4 进程信息区 PID 进程ID PPID 父进程ID PR 优先级 NI nice值 负值表示高优先级,正值表示低优先级 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR 共享内存大小,单位kb S 进程状态 D=不可中断的睡眠状态R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU 上次更新到现在的CPU时间占用百分比 %MEM 进程使用的物理内存百分比 TIME+ 进程使用的CPU时间总计,单位1/100秒 COMMAND 命令名/命令行 二 以上只是默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。 1 通过f键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定
2 按o键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
3 按大写的F或O键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的R键可以将当前的排序倒转。 4 使用参数: d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p 通过指定监控进程ID来仅仅监控某个进程的状态。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名
Ctrl+L擦除并且重写屏幕。 h或者?显示帮助画面,给出一些简短的命令总结说明。 k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 i忽略闲置和僵死进程。这是一个开关式命令。 q退出程序。 r重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 S切换到累计模式。 s改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。 f或者F从当前显示中添加或者删除项目。 o或者O改变显示项目的顺序。 l切换显示平均负载和启动时间信息。 m切换显示内存信息。 t切换显示进程和CPU状态信息。 c切换显示命令名称和完整命令行。 M根据驻留内存大小进行排序。 P根据CPU使用百分比大小进行排序。 T根据时间/累计时间进行排序。 W将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法