网站首页 Cn029.Com - 西安网吧在线℡

Cn029.Com - 西安网吧在线℡ 西北地区网吧行业门户站点www.cn029.com,本站为您提供网吧维护,每日更新最新网吧技术,政策法规.为您提供各类网管软件,网吧软件,游戏更新软件,承接西部地区网吧维护,希望与您共同讨论网吧经营管理的经验!

投递文章  投稿指南 RSS订阅 西安网吧在线通告:
搜索: 您的位置西安网吧在线Linux-UxLinux精华 → 文章内容

vmstat iostat sar Free Top Strace sysstat Iozone

  作者:网络收集   来源:chinaunix.net   更新时间:2008-4-27 4:48:39   【 】  评论:0

Vmstat
Top
Free
Uptime
sysstat
工具包
Iozone

Strace
工具介绍-Vmstat
     Vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下文切换、CPU使用等。系统性能分析工具中,使用最多的是这个,除了sysstat工具包外,这个工具能查看的系统资源最多。
    主要说明这个命令显示出的部分数据代表的含义,和它反映出系统相关资源的状况。输出内容共有6类,分别说明如下。


b.Procs
–   r: 运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
–   b: 处于不可中断状态的进程数,常见的情况是由IO引起的
c.Memory
–   swpd: 切换到交换内存上的内存(默认以KB为单位)
•    如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。
–   free: 空闲的物理内存
–   buff: 作为buffer cache的内存,对块设备的读写进行缓冲
–   cache: 作为page cache的内存, 文件系统的cache
•    如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常
d.Swap
–   si: 交换内存使用,由磁盘调入内存
–   so: 交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。
有些人看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
e.  Io
•    bi: 从块设备读入的数据总量(读磁盘) (KB/s),
•    bo: 写入到块设备的数据总理(写磁盘) (KB/s)
随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大
f.System
–   in: 每秒产生的中断次数
–   cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多
g.Cpu
–   us: 用户进程消耗的CPU时间百分比
•    us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了(比如 PHP/Perl)
–   sy: 内核进程消耗的CPU时间百分比
•    sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
–   wa: IO等待消耗的CPU时间百分比
•    wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
–   id: CPU处在空闲状态时间百分比
h.情景分析 这个vmstat的输出那些信息值得关注?
–   Procs r: 运行的进程比较多,系统很繁忙
–   Io bo: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
–   Cpu us: 持续大于50,服务高峰期可以接受
–   Cpu wa: 稍微有些高
–   Cpu id:持续小于50,服务高峰期可以接受
工具介绍-top
    这个命令可以查看系统中运行的进程的状况,CPU使用状况,系统负载,内存使用等。它是检查系统进程运行状况最方便的工具了,它默认显示部分活动的进程,并且按照进程使用CPU的多少排序。它可以显示全部CPU的使用状况,也可以显示每个进程都运行在那个CPU上面。
    习惯使用这个命令查看那些进程或者那类进程占用CPU和内存资源最多,以此迅速定位存在性能问题的进程,以及运行异常的进程。
Top命令的输出1 (CentOS 3.3)  


Top命令的输出2 (CentOS 3.3)


用top看到的内存的说明(Mem的第2行)
–   actv active 活跃的内存页,正在映射给进程使用。
–   in_d inactive_dirty 非活跃的内存页,并且内存数据被修改,需要写回磁盘。
–   in_c inactive_clean 非活跃的内存页,干净的数据,可以被重新分配使用。
4.问题in_d和in_c以及 cache, buffer的内存有何不同?
   解释:actv, in_d, in_c 是 VM 中对内存的管理组织形式,buffer是块设备读写缓冲,cache是文件系统缓存。
5.用top看到的进程所处的几种状态(STAT列)。
–   D 不可中断休眠,通常是 IO 操作所处的状态
–   R 正在执行的或者处在等待执行的进程队列中
–   S 休眠中
–   T 暂停刮起的(比如Ctrl+Z),也可能是被 strace 命令调用中的状态
–   Z 僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被init进程接管进行销毁。
–   W 没有使用物理内存,所占用的物理内存被切换到交换内存
–   高优先级的进程
–   N 低优先级
有时候一个进程会有多个状态的标志,比如SWN,SW
6.情景分析
   前面两次top的输出那些信息值得关注?
–   图1)
•    Load average: 系统负载有降低的趋势,但仍然较高
•    Running: 有3个进程正在运行,正常,因为系统有4颗CPU
•    Cpu user: 接近200%了,有些大,服务高峰时可以接受
•    Cpu idle: 小于200%了,需要注意
–   图2)
–   Cpu iowait:接近200%了,很大
工具介绍-free
free命令显示系统内存的使用状况(物理内存和交换内存),通过这个命令我们可以看到系统进程实际使用的物理内存,buffer和cache使用的物理内存。


a.   free命令输出的第二行(Mem)
   这行分别显示了物理内存的总量(total)、已使用的(used)、空闲的(free)、共享的(shared)、buffer、cache的内存。
b.   free命令输出的第三行(-/+ buffers/cache) 这行最容易让人迷惑。
    它显示的第一个值(used这一列)是这样得来的:
   Mem行used列 - Mem行buffers列 - Mem行cached列
    它显示的第二个值(free这一列)是这样得来的:
   Mem行free列 + Mem行buffers列 + Mem行cached列
c.   free命令输出的第四行(Swap) 这行显示交换内存的总量、已使用量、空闲量
   通常 buffer 和 cache 可以使用的内存空间越大,系统 IO 和 文件系统访问的性能越好。
工具介绍-uptime
最简便的查看系统负载的工具,系统负载越小,系统运行状况越好,对于系统负载处在什么范围内比较合适,是没有定论的。
    一般以15分钟负载的值来评估系统的健康度,以10为这个值的临界点,如果系统负载持续高于10,通常是存在某个资源长期紧张的原因,我们需要重视,并且得开始着手解决这个问题了。
如果偶尔高于10,应该开始留意它出现的频度,这往往是前面一种状况的先兆。
工具介绍-sysstat工具包
这个工具包提供了著名的 sar 命令,还有非常实用的 iostat, mpstat, sa1, sa2 等命令。   
这几个命令可实现前面提及工具大多数的功能,除此之外,还能查看系统的网络带宽状况、每块磁盘使用状况、每个磁盘分区的使用状况等。
sa1, sa2 这2个命令以配置在cron中定期执行,把系统当时的运行状况信息保存在磁盘上,每日存在一个文件中,因为有这个功能,因此 sar 工具不单是一个性能分析的工具,这2个命令的使用说明如下:
    sa1 配置在cron中可以实现系统状态收集,比如10分钟运行一次
    sa2 配置在cron中可以实现每日状态的汇总报告
    你可以在系统crontab中添加如下配置:
    */10 * * * * root /usr/lib/sa/sa1 1 1
    53 23 * * * root /usr/lib/sa/sa2 -A
工具介绍-其他
a.   Iozone IO和文件系统性能测试的工具,我也习惯用它作存储系统的性能分析。
b.   Strace 如果我们知道一个程序执行效率很差,需要分析这个程序执行时的某个阶段或者某个系统调用的性能状况,可以使用 strace 命令。

附录:性能分析及优化的案例
1.  动态内容为主的网站
该网站系统结构说明
a.   1台Dell2650服务器, 单颗Xeon 3.0G CPU,1G内存,2块72G SCSI磁盘
b.   操作系统 CentOS 3.3
c.   应用基于LAMP架构,所有服务都在一台服务器上
分析和优化的过程
a.   初期性能问题及处理
         i.      表现:早晨和下午访问高峰时,服务器频繁宕机,重启后的一段时间内能正常服务,过一会以后又变的响应缓慢,然后又宕机。
       ii.      检查:发现宕机前系统负载高,Apache httpd.conf 配置最大用户数为1024。
      iii.      处理:修改 httpd.conf 配置文件,降到最大 512 个用户数,仍然频繁宕机,又降到 256 个用户数,系统不宕机了,但是负载很高,站点访问极慢。
b.   初次优化
深入分析系统资源使用情况(vmstat,top,ps)
         i.      结论:CPU资源时常耗尽,因此造成响应缓慢或者长时间没有响应,主要是用户进程消耗资源严重。
       ii.      原因:PHP程序没有使用代码加速,网站首页是个PHP程序,每次用户访问都要多次查询数据库,其他程序也没有Cache机制,数据库查询负荷过高。
      iii.      处理:安装配置turck-mmcache代码加速器,改写网站首页以及部分频繁访问的程序增加cache机制,减少数据库访问。
c.   第二次优化
一段时间后,系统又开始不稳定,访问高峰时站点无法正常访问
         i.      分析系统资源使用状况,发现仍然是CPU耗尽后引起问题,但这次系统IO等待消耗的CPU资源比较大。
       ii.      原因:上次解决了CPU资源容易耗尽的问题,目前网站访问量增加了,apache进程数时常达到256个,导致内存使用殆尽,频繁使用交换内存,最终仍然导致CPU资源耗尽
      iii.      处理:把Apache配置中的 KeepAlive 特性关闭,进程数大量减少,基本保持在80个进程以内,还是会使用交换内存,但是服务正常了。
d.   第三次优化
一段时间后,系统又开始不稳定,访问高峰时站点无法正常访问
         i.      分析发现还是CPU资源耗尽导致的原因。
       ii.      原因:程序频繁访问数据库,大量的SQL语句中有 where, order by 等子句,而大量的表没有建索引,导致MySQL数据库负荷过高,消耗CPU资源过高。
      iii.      处理:优化程序中的SQL语句,where和order by子句上的字段建索引,程序增加Cache机制,再次使服务恢复正常。
e.   第四次优化
一段时间后,系统又开始不稳定,访问高峰时站点无法正常访问
         i.      分析系统资源使用状况,发现还是CPU耗尽造成的。
       ii.      原因:数据库查询过多,大部分都是复杂查询,时常需要遍历全表。
      iii.      处理:优化程序中的SQL语句,增加where子句上的匹配条件,减少遍历全部的查询。
f.   网站结构优化
         i.      鉴于程序的优化空间越来越小,避免以后仍然出现问题,增加了一台专用数据库服务器。
       ii.      在后来的使用过程中,又陆续增加了1台Web前端服务器,和一台只用于读的MySQL数据库服务器。
2.  动态内容+Cache为主的网站
该网站系统结构说明
a.   多台Web前端服务器, 配置都为单颗Xeon 3.0G CPU,4G内存,2块73G SCSI磁盘
b.   操作系统 CentOS 3.3
c.   多台MySQL数据库服务器
d.   基于PHP开发的应用
该应用的特点
a.   大量内容基于数据库,需要频繁访问数据库,并且数据更新很快
b.   采用页面cache机制缓解数据库压力,但页面cache只有5分钟有效期,需要频繁生成新的cache
c.   Cache以文件形式存在磁盘上,都是小文件,最小不到1k,最大不超过128k
问题描述
a.   访问高峰期时Web前端负载比较高,时常超过10
b.   访问高峰期时Web前端响应很慢
性能分析
a.   负载比较高,时常会超过10,CPU Idel经常会小于30%,有时Idel为0,CPU io wait 很大,经常超过30%,磁盘读每秒不超过100k,磁盘写每秒1.5M左右,磁盘tps超过100
b.   访问高峰期时内存也有部分空闲,用于buffer和cache的内存基本占总内存60%以上,没有使用交换内存
原因分析
a.   分析该应用的特点后发现,访问高峰期时,要频繁生成新的cache文件,或者更新以及过期的cache文件,cache文件目录为256x256的哈希结构,因此读写文件时磁盘随机寻址非常频繁
b.   该应用磁盘写远大于磁盘读的原因是系统cache命中率高,大量文件读过一次就cache住了,因此读的开销很小
c.   写磁盘的量并不算很大,平均每秒1.5M,但都是随机写,因此写磁盘速度会稍微慢,也因此会消耗大量CPU时间
d.   对比访问高峰期和访问量小时候的系统状态,磁盘写的tps提高了1倍以上,CPU io wait提高了3倍以上,因此认为主要性能瓶颈在磁盘写上
优化办法
a.   减少磁盘写的次数,cache文件先写在内存中,超过一定访问次数时才写回磁盘,但由于要修改应用程序,因此执行难度大
b.   减少磁盘随机写的次数,前端不使用255x255的哈希目录,而是把多个cache文件写在一个大的cache文件中,并且只作追加写,这样就能把随机写变成了顺序写,cache过期后,整个大的cache文件可以一次删除。但由于要修改应用,因此执行难度大
c.   上面2个办法结合使用,听上去性能会更好,但是执行难度更大
d.   使用tmpfs作cache磁盘(ramdisk也可以),这样写都在访问内存,没有磁盘IO消耗,缺点是cache的空间不会很大,不能超过2G(该服务器是4G内存),但是不用修改应用程序,执行容易:
         i.      Mount –bind /dev/shm /var/www/cache
       ii.      写一个清cache的脚本程序,配置在cron中,30分钟执行一次,检查/dev/shm的使用率超过70%时,使用find命令找出太旧的cache文件删除掉,最终采用了这个办法,高峰期系统负载小于5。
top命令和ps命令的基本作用是相同的,显示系统当前的进程和其它状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。
 
----------------------- Page 1-----------------------
linux 下top 命令参数解释

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,

类似于 Windows 的任务管理器。下面详细介绍它的使用方法。

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+   COMMA

ND

  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

统计信息区

前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime  命令的执行结果。其

内容如下:

01:06:48                     当前时间

up 1:22                      系统运行时间,格式为时:分

1 user                       当前登录用户数

load average: 0.06, 0.60,    系统负载,即任务队列的平均长度。

0.48                         三个数值分别为 1 分钟、5 分钟、15分钟前到现在的平
----------------------- Page 2-----------------------
                             均值。

第二、三行为进程和 CPU 的信息。当有多个CPU 时,这些内容可能会超过两行。内容如

下:

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

最后两行为内存信息。内容如下:

Mem: 191272k t
                  物理内存总量
otal

173656k used      使用的物理内存总量

17616k free       空闲内存总量

22052k buffers    用作内核缓存的内存量

Swap: 192772k
                  交换区总量
total

0k used           使用的交换区总量

192772k free      空闲交换区总量
----------------------- Page 3-----------------------
                  缓冲的交换区总量。

                  内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交

123988k cached  换区尚未被覆盖,

                  该数值即为这些内容已存在于内存中的交换区的大小。

                  相应的内存再次被换出时可不必再对交换区写入。

进程信息区

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号列名           含义

a    PID       进程 id

b    PPID      父进程 id

c    RUSER      Real user name

d    UID       进程所有者的用户 id

e    USER      进程所有者的用户名

f    GROUP     进程所有者的组名

g   TTY        启动进程的终端名。不是从终端启动的进程则显示为 ?

h    PR        优先级

i    NI         nice 值。负值表示高优先级,正值表示低优先级

j    P         最后使用的 CPU,仅在多CPU 环境下有意义

k    %CPU      上次更新到现在的 CPU 时间占用百分比

l   TIME       进程使用的 CPU 时间总计,单位秒

m   TIME+      进程使用的 CPU 时间总计,单位 1/100秒

n    %MEM      进程使用的物理内存百分比

o   VIRT       进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES

p    SWAP      进程使用的虚拟内存中,被换出的大小,单位 kb。

q    RES       进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
----------------------- Page 4-----------------------
序号列名           含义

r   CODE       可执行代码占用的物理内存大小,单位kb

s   DATA       可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb

t   SHR        共享内存大小,单位 kb

u   nFLT       页面错误次数

v   nDRT       最后一次写入到现在,被修改过的页面数。

               进程状态。

               D=不可中断的睡眠状态

               R=运行
w   S
               S=睡眠

               T=跟踪/停止

               Z=僵尸进程

x   COMMAND 命令名/命令行

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 键可

以将当前的排序倒转。
----------------------- Page 5-----------------------
命令使用

1. 工具(命令)名称

top

2.工具(命令)作用

显示系统当前的进程和其他状况; top 是一个动态显示过程,即可以通过用户按键来不断刷

新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.  比较准确的

说,top 命令提供了实时的对系统处理器的状态监视.它将显示系统中 CPU 最“敏感”的任务

列表.该命令可以按 CPU 使用.内存使用和执行时间对任务进行排序;而且该命令的很多特

性都可以通过交互式命令或者在个人定制文件中进行设定.

3.环境设置

在 Linux 下使用。

4.使用方法

4.1使用格式

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

4.2 参数说明

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用 s 交互命令来改变之。

p  通过指定监控进程 ID 来仅仅监控某个进程的状态。

q 该选项将使top 没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top 将

以尽可能高的优先级运行。

S  指定累计模式

s  使top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i 使top 不显示任何闲置或者僵死进程。

c 显示整个命令行而不只是显示命令名

4.3 其他

    下面介绍在 top 命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的

掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了

s 选项,则可能其中一些命令会被屏蔽掉。
----------------------- Page 6-----------------------
    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 配置文件的推荐方法。

 下面是该命令的语法格式:
top [-] [d delay] [q] [c] [s] [S]
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那幺top将以尽可能高的优先级运行。
S 指定累计模式。
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。显示的各项目为:
uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。
processes
  自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。
CPU states
  显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。
  Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。
PID 每个进程的ID。
PPID 每个进程的父进程ID。
UID 每个进程所有者的UID 。
USER 每个进程所有者的用户名。
PRI 每个进程的优先级别。
NI 该进程的优先级值。
SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。
TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。
DSIZE 数据和堆栈的大小。
TRS 文本驻留大小。
D 被标记为“不干净”的页项目。
LIB 使用的库页的大小。对于ELF进程没有作用。
RSS 该进程占用的物理内存的总数量,单位是KB。
SHARE 该进程使用共享内存的数量。
STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。
TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那幺该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。%CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。%MEM 该进程占用的物理内存占总内存的百分比。
COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。
  下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
; 立即刷新显示。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什幺样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
  从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。


top命令的显示 (图略)

第一行表示的项目依次为当前时间、系统运行时间、当前系统登录用户数目、1/5/10分钟系统平均负载(一般来说,这个负载值应该不太可能超过 1 才对,除非您的系统很忙碌。 如果持续高于 5 的话,那么.....仔细的看看到底是那个程序在影响整体系统吧!)。

第二行显示的是所有启动的进程、目前运行、挂起 (Sleeping)的和无用(Zombie)的进程。(比较需要注意的是最后的 zombie 那个数值,如果不是 0 ,嘿嘿!好好看看到底是那个 process 变成疆尸了吧?!)(stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的)

第三行显示的是目前CPU的使用情况,包括us用户空间占用CPU百分比、sy 内核空间占用CPU百分比、ni 用户进程空间内改变过优先级的进程占用CPU百分比(中断处理占用)、id 空闲CPU百分比、wa 等待输入输出的CPU时间百分比、hi,si,st 三者的意思目录还不清楚 :)

第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。

第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的大小。

第六行显示的项目最多,下面列出了详细解释。
PID(Process ID):进程标示号 ( 每个 process 的 ID )
USER:进程所有者的用户名 ( 该 process 所属的使用者 )
PR:进程的优先级别 ( Priority 的简写,程序的优先执行顺序,越小越早被执行 )
NI:进程的优先级别数值 ( Nice 的简写,与 Priority 有关,也是越小越早被执行 )
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME+:该进程启动后占用的总的CPU时间 ( CPU 使用时间的累加 )
Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。

top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。

5.应用实例
使用top命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面,见图2所示。

a.作用
free命令用来显示内存的使用情况,使用权限是所有用户。

b.格式
free [-b|-k|-m] [-o] [-s delay] [-t] [-V]

c.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。

d.应用实例
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
#free -b -s5

使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。


3.1 sadc 工具,

sadc 位于 /usr/lib/sa目录中,如果你没有设置可执行路径,要用绝对路径来运行比较方便 ,/usr/lib/sa/sadc;sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示;

sadc 的用法;


/usr/lib/sa/sadc [ -d ] [ -F ] [ -I ] [ -L ] [ -V ] [ interval [ count ] ] [ outfile ]

参数说明:

-d  报告硬盘设置的相关统计;
-F  强制把数据写入文件;
-I  报告所有系统中断数据;
interval 表示时间间隔,单位是秒,比如3 ;
count 统计数据的次数,也是一个数字;
outfile 输出统计到outfile文件;


注意:此工具中的参数都是可选的,如果没有指定任何参数,比如 /usr/lib/sa/sadc - ,则会输出数据到 /var/log/sa/ 目录下的一个文件中。我们要通过sadf 或sar工具来查看;

[root@localhost beinan]# /usr/lib/sa/sadc  -
[root@localhost beinan]# ls /var/log/sa   注:列出所有sa目录下的文件,根据文件的时间来判断哪个文件是最新的;
[root@localhost beinan]# sar  -f  /var/log/sa/sa12

[root@localhost beinan]# sadf  /var/log/sa/sa12


举例:我们想把sadc收集到的数据写到一个指定的文件中;
[root@localhost ~]# /usr/lib/sa/sadc  1 10 sa000
[root@localhost ~]# sar -f sa000
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)         2006年05月12日
09时15分30秒       CPU     %user     %nice   %system   %iowait     %idle
09时15分31秒       all      3.00      0.00      0.00      1.00     96.00
09时15分32秒       all      0.00      0.00      0.00      0.00    100.00
09时15分33秒       all      0.00      0.00      0.00      0.00    100.00
09时15分34秒       all      0.00      0.00      0.00      0.00    100.00
09时15分35秒       all      0.00      0.00      0.00      0.00    100.00
09时15分36秒       all      0.00      0.00      0.00      0.00    100.00
09时15分37秒       all      0.00      0.00      0.00      0.00    100.00
09时15分38秒       all      0.00      0.00      0.00      0.00    100.00
09时15分39秒       all      0.00      0.00      0.00      0.00    100.00
Average:          all      0.33      0.00      0.00      0.11     99.56
注解:我们用sadc 收集系统动态数据,让它收集1秒之内的10次动态信息; 然后通过sar 工具来查看系统的状态。也可以用 sadf 来查看所收集的数据,但不是太直观。您自己尝试一下看看。查看sa000文件,用 sadf sa000 ;

3.2 sar 工具;

sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行;
用法:

sar  [参数选项]

参数说明:

-A  显示所有历史数据,通过读取/var/log/sar 目录下的所有文件,并把它们分门别类的显示出来;
-b  通过设备的I/O中断读取设置的吞吐率;
-B 报告内存或虚拟内存交换统计;
-c 报告每秒创建的进程数;
-d 报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
-f 从一个二进制的数据文件中读取内容,比如 sar -f filename
-i interval  指定数据收集的时间,时间单位是秒;
-n 分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
-o 把统计信息写入一个文件,比如  -o filename ;
-P 报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
-p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
-r 内存和交换区占用统计;
-R
-t 这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
-u 报告CPU利用率的参数;
-v 报告inode, 文件或其它内核表的资源占用信息;
-w 报告系统交换活动的信息; 每少交换数据的个数;
-W 报告系统交换活动吞吐信息;
-x 用于监视进程的,在其后要指定进程的PID值;
-X 用于监视进程的,但指定的应该是一个子进程ID;


sar 应用举例;
实例一: 如果只用sar 命令,sar就是读取 /var/log/sa目录下最近系统状态文件。

[root@localhost ~]# sar
[root@localhost ~]# sar -A  注:读取/var/log/sa目录下所有文件数据;


如果我们想知道CPU的利用率;动态更新;下面的例子是每秒更新一次数据,总共更新五次;
[root@localhost ~]# sar -u  1 5
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)         2006年05月12日
时间              CPU    利用率    nice值    系统占用    IO占用  空闲
11时19分34秒       CPU     %user     %nice   %system   %iowait     %idle
11时19分35秒       all      2.97      0.00      0.00      0.00     97.03
11时19分36秒       all     11.11      0.00      9.09      0.00     79.80
11时19分37秒       all     21.78      0.00      6.93      0.00     71.29
11时19分38秒       all     15.00      0.00      0.00      0.00     85.00
11时19分39秒       all      8.00      0.00      0.00      0.00     92.00
Average:          all     11.78      0.00      3.19      0.00     85.03
注解:
CPU:表示机器内所有的CPU;
%user 表示CPU的利用率;
%nice 表示CPU在用户层优先级的百分比,0表示正常;
%system 表示当系统运行时,在用户应用层上所占用的CPU百分比;
%iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比;
%idle 表示空闲CPU百分比,值越大系统负载越低;
您可以CPU利用率的动态信息输出到一个文本文件中,然后通过more 来查看。
[root@localhost ~]# sar -u  1 5 > sar000.txt
[root@localhost ~]# more sar000.txt
也可以输出到一个二进制的文件中,然后通过sar来查看;
[root@localhost ~]# sar -u  1 5 -o sar002
[root@localhost ~]# sar -f sar002
注:如果您把数据通过-o filename 输出到一个二进制的文件中,是不能用文件内容查看工具more 、less或cat来查看的,应该用sar工具来查看,要加-f参数;
实例二:查看网络设备的吞吐情况;
比如我们让数据每秒更新一次,总共更新十次;
[root@localhost ~]# sar -n DEV  2 5
时间     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
第一字段:时间;
IFACE:设备名;
rxpck/s:每秒收到的包;
rxbyt/s:每秒收到的所有包的体积;
txbyt/s:每秒传输的所有包的体积;
rxcmp/s:每秒收到数据切割压缩的包总数;
txcmp/s :每秒传输的数据切割压缩的包的总数;
rxmcst/s: 每秒收到的多点传送的包;
如果我们从事提取eth0设备(也就是网卡eth0)的信息;我们应该用grep 来过滤。然后再显示出来;
[root@localhost ~]# sar -n DEV  2  5  |grep eth0
11时52分37秒      eth0  1.00  1.00   97.51   97.51   0.00    0.00      0.00
11时52分39秒      eth0  1.01  1.01   98.49   98.49   0.00    0.00      0.00
11时52分41秒      eth0  1.00  1.00   98.00   98.00   0.00    0.00      0.00
11时52分43秒      eth0  1.00  1.00   98.00   98.00   0.00    0.00      0.00
11时52分45秒      eth0  1.00  1.00   98.00   98.00   0.00    0.00      0.00
Average:   eth0   1.00  1.00  98.00   98.00   0.00    0.00      0.00
如果想知道网络设备错误报告,也就就是用来查看设备故障的。应该用EDEV;比如下面的例子;
[root@localhost ~]# sar -n EDEV  2 5

3.3 iostat

iostat 是用来显示 系统即时系统,比如CPU使用率,硬盘设备的吞吐率;
[root@localhost ~]# iostat
Linux 2.6.15-1.2054_FC5 (localhost.localdomain)   2006年05月12日
avg-cpu:  %user   %nice %system %iowait   %idle
           7.24    0.00    0.99    0.35   91.43
Device:   tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda      1.46        28.43        21.43     710589     535680

3.4 mpstat

mpstat 提供多处理器系统中的CPU的利用率的统计;mpstat 也可以加参数,用-P来指定哪个 CPU,处理器的ID是从0开始的。下面的例子是查看两个处理器,每二秒数据更新一次,总共要显示10次数据;
[root@localhost ~]# mpstat -P 0 2 10  注:查看第一个CPU
[root@localhost ~]# mpstat -p 1 2 10  注:查看第二个CPU
[root@localhost ~]# mpstat 2 10  注:查看所有CPU;

3.5 sdaf

sdaf 能从二进制文件中提取sar所收集的数据;这个大家知道就行了。显示的并不是友好的格式;
[root@localhost ~]# sar -u 2 5 -o sar003
[root@localhost ~]# sadf  sar003
相对来说,用sar来读取输出文件的内容更好;比如下面的;
[root@localhost ~]# sar -f sar003

4、 与Sysstat相似工具;


4.1 进程管理工具;

进程管理工具,包括ps 、pgrep、top、kill 、killall、pkill 等,请参考
《 Linux 进程管理》

4.2 内存使用率查看工具;

内存使用量 free
free 工具既能查看物理内存,也能查看虚拟内存的用量;
[root@localhost ~]# free
如果显示以单位M,则加-m参数;
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           724        713         11          0         24        290
-/+ buffers/cache:        398        326
Swap:          800          0        800

vmstat 即时显示内存工具;

vmstat 是一个即时显示内存使用情况的工具;
vmstat 使用方法:
vmstat [-V] [-n] [delay [count]]
              -V 显示vmstat的版本;
              -n causes the headers not to be reprinted regularly.
              -a 显示所有激活和未激活内存的状态;print inactive/active page stats.
              -d 显示硬盘统计信息;prints disk statistics
              -D 显示硬盘分区表;prints disk table
              -p 显示硬盘分区读写状态等;prints disk partition statistics
              -s 显示内存使用情况;prints vm table
              -m prints slabinfo
              -S 定义单位,k K
              delay 是两次刷新时间间隔;
              单位体积: k:1000 K:1024 m:1000000 M:1048576 (默认是 K)
              count 刷新次数;





Linux下vmstat输出释疑:
Vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0
procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。
IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
Solairs系统下vmstat输出释疑
vmstat 5 5
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s1 s1 -- -- in sy cs us sy id
0 0 0 704968 207640 0 1 2 0 0 0 0 0 0 0 0 302 6 31 0 0 100
0 0 0 705048 206728 1 2 0 0 0 0 0 0 0 0 0 302 4 34 0 0 100
0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 302 3 35 0 0 100
0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 301 3 34 0 0 100
0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 302 6 35 0 0 100
procs
r 列表示在运行队列中等待的进程数。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
w 列表示可以进入运行队列但被交换出来的进程
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。
faults 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。
sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。
cs 列表示,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swap 当前可用内存交换区容量(k表示)。
free 当前的空闲页面列表中内存数量(k表示)
page
re 列表示回收的页面数。
mf 列表示小级别错误计数。
pi 列表示进入页面数 (k表示)。
po 列表示出页面数(k表示)。
fr 列表示空余的页面数(k表示)。
de 列表示提前读入的页面中的未命中数。
sr 列表示通过时钟算法扫描的页面计数
solairs下iostat释疑
iostat -xtc 5 2
extended device statistics tty cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id
sd1 0.3 0.0 3.4 0.1 0.0 0.0 13.2 0 0 0 0 0 0 0 100
sd15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
extended device statistics tty cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id
sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 77 0 0 0 100
sd15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
tty和CPU使用率报告
tin 显示了系统为所有 tty 读取的字符总数。
tout 显示了系统为所有 tty 写入的字符总数。
us 显示了在用户级应用程序在缺省的优先级别执行时的 CPU 使用率百分比。
sy 显示了在用户级应用程序在降低优先级执行时的 CPU 使用率百分比。
wt 显示了在系统级(内核)执行时生成的 CPU 使用率。
id 显示了 CPU 空闲期间系统有未完成的磁盘 I/O 请求时的时间百分比。
磁盘使用率报告
device 被统计的硬盘设备名,包括nfs设备。
r/s 表示每秒钟读的次数
w/s 表示每秒钟写的次数
kr/s 表示每秒钟读的K字节数
kw/s 表示每秒钟写的K字节数
wait 表示平均多少个传输等待被处理,相当于读写等待队列长度
actv 表示平均多少个传输从读写等待队列中移出做处理
svc_t 表示每次硬盘传输平均耗费的时间,以毫秒为单位,这里我们设置的参考值为30ms,超过说明硬盘负载太多
%w 表示每次传输所消耗时间里面,等待所占的百分比
%b 表示硬盘忙的时间所占百分比,这里我们设置参考值为5%,超过5%说明硬盘负载太多,最好采取以下步骤:
1.)调整应用,令其使用磁盘i/o更加有效率,可以通过修改磁盘队列、使用应用服务器的cache
2.)将文件系统分布到2个或多个磁盘上,并使用volume manager/disksuite的条带化特点
3.) 增加系统参数值,如inode cache , ufs_ninode。
AIX下vmstat释疑:
# vmstat 5 20
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 244528 1227 0 3 3 56 151 0 404 1420 1415 4 2 88 6
2 6 244538 1241 0 39 148 2424 3511 0 904 4660 7571 49 12 2 38
5 3 244540 791 0 2 221 3937 6077 0 1183 6605 24619 44 34 1 21
1 7 245326 1009 0 11 331 1071 1934 0 884 3788 13000 23 25 0 52
分析如下:
kthr
kthr列表示每秒钟在采样间隔时间上对各种队列中的内核线程数求得的平均值
r 列表示可运行的内核线程平均数,包括正在运行的线程和正在等待 CPU的线程。如果这个数字大于 CPU 的数目,至少有一个线程要等待 CPU,等待 CPU 的线程越多,越有可能对性能产生影响。
b 列表示每秒 VMM 等待队列中的内核线程平均数。这包括正在等待文件系统 I/O 的线程,或由于内存装入控制而暂挂的线程。这里参考值为2,大于2表示被阻塞列线程数目太多。
!阻塞线程数目太多
CPU
us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。
wa 列详细显示了暂挂本地磁盘 I/O 和 NFS 加载的磁盘的 CPU 空闲百分比。这里参考值为25%,大于25% 可能表示磁盘子系统可能没有被正确平衡,或者这也可能是磁盘密集工作负载的结果。
[us]+[sy] !IO不平衡
[wa] 正常
fault
in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。
sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。
cs 列表示,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
[sy] 正常
memory
avm 列表示在收集 vmstat 样本时存在的活动虚拟内存页面数(4k为单位)。理想情况下, avm 应该比总 RAM 数小。如果不是,可能会出现一些虚拟内存页面调度量。有多少页面调度发生取决于两个值之间的差值。记住,虚拟内存的概念是提供给我们寻址大于实内存容量的能力(一些在 RAM 内存中,而另一些在调页空间中)。但是如果虚拟内存远大于实内存,可能造成过度的页面调度,从而导致延时。如果 avm 小于 RAM,那么当 RAM 中填满文件页时就会引起调页空间的页面调度。这种情况下,调整 minperm、maxperm 和 maxclient 的值可以减少调页空间的页面调度量。
fre 列显示出空闲内存页面的平均数量(4k为单位)。VMM 在空闲列表上保存的最少页面数由 minfree 参数决定。这里的参考值为maxfree的缺省值720,小于720说明存在内存系统颠簸。
[fre] 正常
[avm] avm的值约为:958MB
page
pi 列详细描述了从调页空间调入的页数。调页空间是驻留在磁盘上的虚拟内存的一部分。当内存过量使用时,它用作溢出。调页空间由用于存储从实内存中窃取到的工作组页面的逻辑卷组成。当进程访问一个窃取页时,产生了一个缺页故障,这一页必须从调页空间读入内存。这里设置pi的参考值为5,大于5说明内存不足。
po 列显示了调出到调页空间的页面数(速率)。无论什么时候窃取工作存储器的一页,如果它仍未驻留在调页空间中或已被修改,那它会被写入调页空间。如果不被再次访问,它会留在页面调度设备中直到进程终止或放弃空间。如果包含在出故障页面中的后续地址引用导致缺页故障,那么这些页面将会由系统个别调进。当一个进程正常终止,任何分配给该进程的调页空间将被释放。
fr 列表示在一定时间间隔内根据页面替换算法每秒所释放的页数。当 VMM 页面替换例程扫描页面帧表(Page Frame Table,PFT)时,它使用一些条件选取要窃取的页面以插入到可用内存帧的空闲列表中。
sr 列表示在一定时间间隔内根据页面替换算法每秒所检查的页面数。页面替换算法在可以窃取足够的页面以满足页面替换线程的需要之前可能不得不扫描许多页面帧。
cy 列表示每秒页面替换代码扫描了 PFT 多少次。因为插入空闲列表可以不需要完全扫描 PFT,并且因为所有的 vmstat 字段报告为整数,这一字段通常为 0。
这里设置fr:sr的参考值为3,超过说明内存不足。
[pi] !存在内存不足
[fr:sr] 正常
AIX命令iostat释疑
# iostat hdisk1 hdisk2 5 5
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 0.3 0.2 0.4 99.4 0.1
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk2 0.1 1.0 0.2 45090 51075
hdisk1 0.0 0.0 0.0 0 0
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 70.6 45 54 99.4 0.0
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk2 0.0 0.0 0.0 0 0
hdisk1 0.0 0.0 0.0 0 0
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 70.6 0.0 0.4 99.6 0.0
Disks: % tm_act Kbps tps Kb_read Kb_wrtn
hdisk2 0.0 0.0 0.0 0 0
hdisk1 0.0 0.0 0.0 0 0
分析结果
tty和CPU使用率报告
tin 显示了系统为所有 tty 读取的字符总数。
tout 显示了系统为所有 tty 写入的字符总数。
% user 显示了在用户级(应用程序)执行时生成的 CPU 使用率百分比。
% sys 显示了在系统级(内核)执行时生成的 CPU 使用率百分比。
% idle 显示了在 CPU 空闲并且系统没有未完成的磁盘 I/O 请求时的时间百分比。
% iowait 显示了 CPU 空闲期间系统有未完成的磁盘 I/O 请求时的时间百分比。
[user][+][sys] !CPU能力不足
[wait] 正常
磁盘使用率报告
% tm_act 表示物理磁盘处于活动状态的时间百分比(驱动器的带宽使用率)。
Kbps 表示以 KB 每秒为单位的传输(读或写)到驱动器的数据量。
tps 表示每秒钟输出到物理磁盘的传输次数。一次传输就是一个对物理磁盘的 I/O 请求。多个逻辑请求可被并为对磁盘的一个单一 I/O 请求。传输具有不确定的大小。
Kb_read 读取的 KB 总数。
Kb_wrtn 写入的 KB 总数。
磁盘负载均衡评估 正常
带宽使用评估 带宽值为:0Kbps
Hp-UNIX 命令vmstat释疑
# vmstat 5 5
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
2 0 0 52260 24324 9 4 0 0 0 0 1 109 427 81 2 1 97
2 0 0 52260 24285 0 0 0 0 0 0 0 110 207 90 0 0 99
1 0 0 56211 24285 0 0 0 0 0 0 0 106 192 80 0 0 100
1 0 0 56211 24285 0 0 0 0 0 0 0 107 152 76 0 0 100
2 0 0 56552 24285 0 0 0 0 0 0 0 106 154 72 0 0 100
分析结果
procs
r 列表示在运行队列中等待的进程数。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
w 列表示可以进入运行队列但被交换出来的进程 。
正常
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。
[us]+[sy] 正常
fault 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。
sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。
cs 列表示,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
[sy] 正常
memory
avm 当前激活的虚拟内存数量(k表示)。
free 当前的空闲页面列表中内存数量(k表示)
[free] 正常
page
re 列表示回收的页面数。
at 列表示地址翻译错误计数。
pi 列表示进入页面数 (k表示)。
po 列表示出页面数(k表示)。
fr 列表示空余的页面数(k表示)。
de 列表示提前读入的页面中的未命中数。
sr 列表示通过时钟算法扫描的页面计数
[po] 正常
[fr:sr] 正常
Hp-unix下iostat释疑
# iostat 5 5
device bps sps msps
c0t6d0 0 0.0 1.0
c0t6d0 2 1.0 1.0
c0t6d0 2 0.8 1.0
c0t6d0 4 2.0 1.0
c0t6d0 2 1.0 1.0
分析结果
缓冲区性能分析
device: iostat统计的设备名称。
bps: 每秒该设备传输的K字节数。
sps: 每秒检索该设备次数。
msps: 平均每次检索所花费的时间,单位毫秒。
[bps] 正常

这里实际上涉及到buffer cache ,page cache两个概念。
先解释一下
buffer cache 也叫块缓冲,是对物理磁盘上的一个磁盘块进行的缓冲,其大小为通常为1k,磁盘块也是磁盘的组织单位。设立buffer cache的目的是为在程序多次访问同一磁盘块时,减少访问时间。系统将磁盘块首先读入buffer cache 如果cache空间不够时,会通过一定的策略将一些过时或多次未被访问的buffer cache清空。程序在下一次访问磁盘时首先查看是否在buffer cache找到所需块,命中可减少访问磁盘时间。不命中时需重新读入buffer cache。对buffer cache 的写分为两种,一是直接写,这是程序在写buffer cache后也写磁盘,要读时从buffer cache 上读,二是后台写,程序在写完buffer cache 后并不立即写磁盘,因为有可能程序在很短时间内又需要写文件,如果直接写,就需多次写磁盘了。这样效率很低,而是过一段时间后由后台写,减少了多次访磁盘的时间。
buffer cache 是由物理内存分配,linux系统为提高内存使用率,会将空闲内存全分给buffer cache ,当其他程序需要更多内存时,系统会减少cahce大小,
page cache 也叫页缓冲或文件缓冲,是由好几个磁盘块构成,大小通常为4k,在64位系统上为8k,构成的几个磁盘块在物理磁盘上不一定连续,文件的组织单位为一页,也就是一个page cache大小,文件读取是由外存上不连续的几个磁盘块,到buffer cache,然后组成page cache,然后供给应用程序。
page cache在linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。具体说是加速对文件内容的访问,buffer cache缓存文件的具体内容——物理磁盘上的磁盘块,这是加速对磁盘的访问。
swap space 交换空间,是虚拟内存的表现形式。系统为了应付一些需要大量内存的应用,而将磁盘上的空间做内存使用,当物理内存不够用时,将其中一些暂时不需的数据交换到交换空间,也叫交换文件或页面文件中。做虚拟内存的好处是让进程以为好像可以访问整个系统物理内存。因为在一个进程访问数据时,其他进程的数据会被交换到交换空间中。
现在来分析问题,程序第一次执行时,读取文件过程,从磁盘读取到buffer cache 到page cache再到应用程序的进程空间。第二次执行时由于buffer cache中已经有了部分或全部的文件内容,这样执行时间就要减少些。当然这也要视情景而定,具体有很多。当文件改名后,其数据的物理地址未变,程序执行时通过文件指针仍能在内存上找到正确数据所以执行时间应该和第二次相同,但是umount文件系统后,这些buffer cache 和page cache信息应该会删除,因为若重新挂载另一文件系统时,同样的文件名可能不对应同一个文件,所以这时执行时间应该和第一次一样。(个人看法,待修正)
linux中,应用程序访问文件也就是内核访问page cache的API有两种方式,1.通过VFS直接在不同文件的Cache之间或者Cache与应用程序所提供的用户空间buffer之间拷贝数据,其实现原理如图7所示。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/44757/showart_519767.html

Tags: 网吧 硬件 价格 最新  
责任编辑:Cn029.Com
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 验证码: 验证码,看不清楚?请点击刷新验证码

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    评论总数:0条,平均得分:0[ 查看全部 ] 网友评论