Sar命令的使用
[root@localhost ~]# which sar
/usr/bin/sar
[root@localhost ~]# rpm -qf /usr/bin/sar
sysstat-7.0.2-3.el5
可以看出sar命令的安装包名字为:sysstat,如果你还没有安装这个包的话,当然是不能使用sar命令了。
[root@localhost ~]# sar --help
Usage: sar [ options... ] [ 
] ]
sar 命令行的常用格式:
sar [options] [-A] [-o file] t [n]
在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有
的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式
存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令
的选项很多,下面只列出常用选项:
          -A:所有报告的总和。
       -u:CPU利用率
        -v:进程、I节点、文件和锁表状态。
       -d:硬盘使用报告。
       -r:没有使用的内存页面和硬盘块。
       -g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
-o: 指定输出采样信息的文件名。
下面举例来说明:
例一:使用命令行 sar -u t n
例如,每10秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制
形式存入当前目录下的文件zhou中,需键入如下命令
[root@localhost ~]# sar -u -o cpu_1 10 5
Linux 2.6.18-164.el5 (localhost)       2012年04月01日
02时08分20秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
02时08分30秒       all      0.00      0.00      0.10      0.30      0.00     99.60
02时08分40秒       all      0.00      2.94      3.04      0.00      0.00     94.03
02时08分50秒       all      0.00      0.00      0.20      0.00      0.00     99.80
02时09分00秒       all      0.00      0.00      0.40      0.00      0.00     99.60
02时09分10秒       all      0.00      0.00      0.20      0.00      0.00     99.80
Average:              all      0.00      0.58      0.78      0.06      0.00     98.58
在显示内容包括:
%usr:CPU处在用户模式下的时间百分比。
   %sys:CPU处在系统模式下的时间百分比。
  %wio:CPU等待输入输出完成时间的百分比。
   %idle:CPU空闲时间百分比。
在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在 I/O瓶颈,%idle值高,
表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存, 此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
如果要查看二进制文件zhou中的内容,则需键入如下sar命令:
[root@localhost ~]# sar -f cpu_1
Linux 2.6.18-164.el5 (localhost)       2012年04月01日
02时08分20秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
02时08分30秒       all      0.00      0.00      0.10      0.30      0.00     99.60
02时08分40秒       all      0.00      2.94      3.04      0.00      0.00     94.03
02时08分50秒       all      0.00      0.00      0.20      0.00      0.00     99.80
02时09分00秒       all      0.00      0.00      0.40      0.00      0.00     99.60
02时09分10秒       all      0.00      0.00      0.20      0.00      0.00     99.80
Average:          all      0.00      0.58      0.78      0.06      0.00     98.58
可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。
例二:使用命行sar -v t n
例如,每2秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:
[root@localhost ~]# sar -v 2 5
Linux 2.6.18-164.el5 (localhost)       2012年04月01日
02时14分36秒 dentunusd   file-sz  inode-sz  super-sz %super-sz  dquot-sz %dquot-sz  rtsig-sz %rtsig-sz
02时14分38秒     53505       832     52003         0      0.00         0      0.00         0      0.00
02时14分40秒     53505       832     52003         0      0.00         0      0.00         0      0.00
02时14分42秒     53505       832     52003         0      0.00         0      0.00         0      0.00
02时14分44秒     53505       832     52003         0      0.00         0      0.00         0      0.00
02时14分46秒     53505       832     52003         0      0.00         0      0.00         0      0.00
Average:        53505       832     52003         0      0.00         0      0.00         0      0.00
显示内容包括: 

proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。 

  inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数 
MAX- INODE控制。 

  file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控 
制。 

  ov:溢出出现的次数。 

  Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE 
控制。 

显示格式为 

实际使用表项/可以使用的表项数 

显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如 
果出现溢出时,要调整相应的核心参数,将对应的表项数加大。 

例三:使用命行sar -d t n 
例如,每30秒采样一次,连续采样5次,报告设备使用情况,需键入如下命令: 
# sar -d 30 5 
屏幕显示: 
      SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 
11:06:43 device %busy   avque   r+w/s  blks/s  avwait avserv (-d) 
11:07:13 wd-0   1.47   2.75   4.67   14.73   5.50 3.14 
11:07:43 wd-0   0.43   18.77   3.07   8.66   25.11 1.41 
11:08:13 wd-0   0.77   2.78   2.77   7.26   4.94 2.77 
11:08:43 wd-0   1.10   11.18   4.10   11.26   27.32 2.68 
11:09:13 wd-0   1.97   21.78   5.86   34.06   69.66 3.35 
Average wd-0   1.15   12.11   4.09   15.19   31.12 2.80 

显示内容包括: 
device: sar命令正在监视的块设备的名字。 
   %busy: 设备忙时,传送请求所占时间的百分比。 
   avque: 队列站满时,未完成请求数量的平均值。 
   r+w/s: 每秒传送到设备或从设备传出的数据量。 
   blks/s: 每秒传送的块数,每块512字节。 
   avwait: 队列占满时传送请求等待队列空闲的平均时间。 
   avserv: 完成传送请求所需平均时间(毫秒)。 

在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有 
效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统 
的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。 
例四:使用命行sar -b t n 
例如,每30秒采样一次,连续采样5次,报告缓冲区的使用情况,需键入如下命令: 
# sar -b 30 5 

屏幕显示: 
  SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001 
14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b) 
14:55:29 0  147  100  5  21  78   0   0 
14:55:59 0  186  100  5  25  79   0   0 
14:56:29  4  232   98  8  58  86   0   0 
14:56:59 0  125  100  5  23  76   0   0 
14:57:29 0   89  100  4  12  66   0   0 
Average  1  156   99  5  28  80   0   0 

显示内容包括: 
bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。 
lread/s: 平均每秒从系统buffer读出的逻辑块数。 
%rcache: 在buffer cache中进行逻辑读的百分比。 
bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。 
lwrit/s: 平均每秒写到系统buffer逻辑块数。 
%wcache: 在buffer cache中进行逻辑读的百分比。 
pread/s: 平均每秒请求物理读的次数。 
pwrit/s: 平均每秒请求物理写的次数。 

在显示的内容中,最重要的是%cache 和%wcache两列,它们的值体现着buffer的使用效 
率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统 buffer的数量,buffer 
数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但buffer参数值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到提高。 
例五:使用命行sar -g t n 
例如,每30秒采样一次,连续采样5次,报告串口I/O的操作情况,需键入如下命令: 
# sar -g 30 5 

屏幕显示: 
SCO_SV scosysv 3.2v5.0.5 i80386  11/22/2001 
17:07:03  ovsiohw/s  ovsiodma/s  ovclist/s (-g) 
17:07:33   0.00   0.00   0.00 
17:08:03    0.00   0.00   0.00 
17:08:33   0.00   0.00   0.00 
17:09:03    0.00   0.00   0.00 
17:09:33   0.00   0.00   0.00 
Average    0.00   0.00   0.00 

显示内容包括: 
ovsiohw/s:每秒在串口I/O硬件出现的溢出。 
ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。 
ovclist/s :每秒字符队列出现的溢出。 
在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口I/O溢 
出现象。 

sar命令的用法很多,有时判断一个问题,需要几个sar 命令结合起来使用,比如,怀疑 
CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和 
sar-d来看 

Sar 
-A 所有的报告总和 
-a 文件读,写报告 
-B 报告附加的buffer cache使用情况 
-b buffer cache使用情况 
-c 系统调用使用报告 
-d 硬盘使用报告 
-g 有关串口I/O情况 
-h 关于buffer使用统计数字 
-m IPC消息和信号灯活动 
-n 命名cache 
-p 调页活动 
-q 运行队列和交换队列的平均长度 
-R 报告进程的活动 
-r 没有使用的内存页面和硬盘块 
-u CPU利用率 
-v 进程,i节点,文件和锁表状态 
-w 系统交换活动 
-y TTY设备活动 

-a 报告文件读,写报告 
sar –a 5 5 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002 
11:45:40 iget/s namei/s dirbk/s (-a) 
11:45:45 6 2 2 
11:45:50 91 20 28 
11:45:55 159 20 18 
11:46:00 157 21 19 
11:46:05 177 30 35 
Average 118 18 20 

iget/s 每秒由i节点项定位的文件数量 
namei/s 每秒文件系统路径查询的数量 
dirbk/s 每秒所读目录块的数量 
*这些值越大,表明核心花在存取用户文件上的时间越多,它反映着一些程序和应用文件系统产生的负荷。一般地,如果iget/s与namei/s的比值大于5,并且 namei/s的值大于30,则说明文件系统是低效的。这时需要检查文件系统的自由空间,看看是否自由空间过少。 

-m 报告进程间的通信活动(IPC消息和信号灯活动)情况 
sar -m 4 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 
13:24:28 msg/s sema/s (-m) 
13:24:32 2.24 9.95 
13:24:36 2.24 21.70 
13:24:40 2.00 36.66 
Average 2.16 22.76 

msg/s 每秒消息操作的次数(包括发送消息的接收信息)。 
sema/s 每秒信号灯操作次数。 
*信号灯和消息作为进程间通信的工具,如果在系统中运行的应用过程中没有使用它们,那么由sar命令报告的msg 和sema的值都将等于0.00。如果使用了这些工具,并且其中或者msg/s大于100,或者sema/s大于100,则表明这样的应用程序效率比较低。原因是在这样的应用程序中,大量的时间花费在进程之间的沟通上,而对保证进程本身有效的运行时间必然产生不良的影响。 

-n 报告命名缓冲区活动情况 
sar -n 4 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 
13:37:31 c_hits cmisses (hit %) (-n) 
13:37:35 1246 71 (94%) 
13:37:39 1853 81 (95%) 
13:37:43 969 56 (94%) 
Average 1356 69 (95%) 

c_hits cache命中的数量。 
cmisses cache未命中的数量。 
(hit %) 命中数量/(命中数理+未命中数量)。 
*不难理解,(hit %)值越大越好,如果它低于90%,则应该调整相应的核心参数。 

-p 报告分页活动 
sar -p 5 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 
13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p) 
13:45:31 36.25 50.20 0.00 0.00 
13:45:36 32.14 58.48 0.00 0.00 
13:45:41 79.80 58.40 0.00 0.00 
Average 49.37 55.69 0.00 0.00 

vflt/s 每秒进行页面故障地址转换的数量(由于有效的页面当前不在内存中)。 
pflt/s 每秒来自由于保护错误出现的页面故障数量(由于对页面的非法存,取引起的页面故障)。 
pgfil/s 每秒通过”页—入”满足vflt/s的数量。 
rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。 
*如果vflt/s的值高于100,可能预示着对于页面系统来说,应用程序的效率不高,也可能分页参数需要调整,或者内存配置不太合适。 

-q 报告进程队列(运行队列和交换队列的平均长度)情况 
sar -q 2 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002 
14:25:50 runq-sz %runocc swpq-sz %swpocc (-q) 
14:25:52 4.0 50 
14:25:54 9.0 100 
14:25:56 9.0 100 
Average 7.3 100 
runq-sz 准备运行的进程运行队列。 
%runocc 运行队列被占用的时间(百分比) 
swpq- sz 要被换出的进程交换队列。 
%swpocc 交换队列被占用的时间(百分比)。 
*如果%runocc大于90,并且runq- sz的值大于2,则表明CPU的负载较重。其直接后果,可能使系统的响应速度降低。如果%swpocc大于20,表明交换活动频繁,将严重导致系统效率下降。解决的办法是加大内存或减少缓存区数量,从而减少交换及页—入,页—出活动。 

-r 报告内存及交换区使用情况(没有使用的内存页面和硬盘块) 
sar -r 2 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 
10:14:19 freemem freeswp availrmem availsmem (-r) 
10:14:22 279729 6673824 93160 1106876 
10:14:24 279663 6673824 93160 1106876 
10:14:26 279661 6673824 93160 1106873 
Average 279684 6673824 93160 1106875 

freemem 用户进程可以使用的内存页面数,4KB为一个页面。 
freeswp 用于进程交换可以使用的硬盘盘块,512B为一个盘块。 

-w 系统交换活动 
sar -w 2 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 
11:22:05 swpin/s bswin/s swpot/s bswots pswch/s (-w) 
11:22:07 0.00 0.0 0.00 0.0 330 
11:22:09 0.00 0.0 0.00 0.0 892 
11:22:11 0.00 0.0 0.00 0.0 1053 
Average 0.00 0.0 0.00 0.0 757 

swpin/s 每秒从硬盘交换区传送进入内存的次数。 
bswin/s 每秒为换入而传送的块数。 
swpot/s 每秒从内存传送到硬盘交换区的次数。 
bswots 每秒为换出而传送的块数。 
pswch/s 每秒进程交换的数量。 
*swpin/s,bswin/s,swpot/s和bswots描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的读,写操作比内存读,写慢得多,因此,为了提高系统效率就应该设法减少交换。通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果swpot/s的值大于1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。 

-y 报告终端的I/O活动(TTY设备活动)情况 
sar -y 2 3 
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002 
11:38:03 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s (-y) 
11:38:05 5 0 951 0 1 0 
11:38:07 10 0 996 0 0 0 
11:38:09 4 0 2264 0 0 0 
Average 6 0 1404 0 1 0 

rawch/s 每秒输入的字符数(原始队列) 
canch/s 每秒由正则队列(canonical queue)处理的输入字符数。进行正则处理过程中,可以识别出一些有特殊意义的字符。比如,(中断字符),(退出符),(退格键)等。因此,canch/s中的计数不包括这些有特殊意义的字符。 
outch/s 每秒输出的字符数。 
rcvin/s 每秒接收的硬件中断次数。 
xmtin/s 每秒发出的硬件中断次数。 
mdmin/s 每秒modem中断次数。 
*应该特别说明,sar命令可以对任意终端活动进行统计,所谓任意终端,是指任意tty设备。它们可以是串行终端,主控台,伪终端等等。 
*在这几个量中,modem中断次数mdmin/s应该接近0。其它没有特殊要求,但如果每发送一个字符,中断的数量就动态地增加,这表明终端线出了差错,可能是接触不好。