sar 详解

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:系统交换活动。

下面将举例说明。

例一:使用命令行 sar -u t n

例如,每60秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件zhou中,需键入如下命令:

# sar -u -o zhou 60 5

屏幕显示:

  SCO_SV   scosysv 3.2v5.0.5 i80386   10/01/2001
    14:43:50   %usr   %sys  %wio    %idle(-u)
    14:44:50   0     1    4      94
    14:45:50   0     2    4      93
    14:46:50   0     2    2      96
    14:47:50   0     2    5      93
    14:48:50   0     2    2      96
    Average    0     2    4      94

在显示内容包括:

  %usr:CPU处在用户模式下的时间百分比。
  %sys:CPU处在系统模式下的时间百分比。
  %wio:CPU等待输入输出完成时间的百分比。
  %idle:CPU空闲时间百分比。

在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,
此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

如果要查看二进制文件zhou中的内容,则需键入如下sar命令:

    # sar -u -f zhou

可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。

例二:使用命行sar -v t n

例如,每30秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:

# sar -v 30 5

屏幕显示:

SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
10:33:23 proc-sz ov inod-sz ov file-sz ov lock-sz   (-v)
10:33:53 305/ 321  0 1337/2764  0 1561/1706 0 40/ 128
10:34:23 308/ 321  0 1340/2764  0 1587/1706 0 37/ 128 
10:34:53 305/ 321  0 1332/2764  0 1565/1706 0 36/ 128
10:35:23 308/ 321  0 1338/2764  0 1592/1706 0 37/ 128
10:35:53 308/ 321  0 1335/2764  0 1591/1706 0 37/ 128 

显示内容包括:

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来看。

 

 

1       什么是SAR

  SAR : system activity report

  顾名思义,SAR是用来收集并保存系统活动的信息的工具。sar工具将对系统当前的状态进行采样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统采样,获得大量的采样数据;采样数据和分析的结果都可以存入文件,而所需的负载很小。

  SAR包括如下部分:

       sar 工具负责收集、报告并存储系统活跃的信息.

       sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工

           cron来运行,是为sadc所设计的程序前端程序.

       sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端

           要通过cron来调用.

       sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar

           具的后端.

       sadf 显示被sar通过多种格式收集的数据.

2         SAR的作用

  SAR可以用来监视系统运行时的CPU,内存,I/O及网络使用情况。以便找出系统运行时可能存在的瓶颈。SAR 用于检查的性能数据类似于vmstat, mpstat iostat的显示。 sar的数据是一段时间保存的内容,因此可以察看过去的信息。

 

  SAR可以将采样数据显示在终端,也可以将数据保存在文件中。这说明它有两个方面的功能:

  1. 实时进行系统数据的采用,SAR通过后台程序sadc进行数据的采用,并可以把它显示在系统终端,或者保存到指定文件中,如果不指定,则默认保存在/var/log/sa目录下的saxx文件中。
  2. 分析SAR的数据文件,SAR将数据保存在指定的二进制文件中,如果要分析这些数据。可以通过SAR程序使用后台程序sadf进行数据的分析,并打印到终端。

 

  根据用户的需求,SAR可以启动固定时间内的采用,并且可以约定采用次数。配合系统调度命令CRONSAR提供了两个脚本来处理每天或者每十分钟的定时执行的系统系统采用任务:

  1. sa1是调用 sadc 以将性能数据收集到二进制日志文件中的一个 Shell 脚本
  2. sa2是将当日二进制日志文件中所有的数据转储到文本文件的另一个 Shell 脚本

当然,SAR也可以提供每一秒扫描一次的粒度进行采用。但是所占用的CPU资源比较大。这需要我们在粒度和系统性能影响之间进行折衷。
使用SAR

  以下介绍的是常用命令,具体细节请参考帮助文档或者相关资料。

3.1    SAR命令

  sar [-options] [interval [count]]

其中,options可选参数指定输出数据;internal是两次采样的间隔时间;count是指采样的次数;

<1> 动态地采用系统数据并分析

    sar命令必须代参数internal. Optionts可以不指定,默认是-A(所有).count可以不指定,默认为1.

    例如:sar 2 5  -- sar2秒采用一次,一个采用5次。显示所有数据到终端。

<2> 从文件中获得数据进行分析

    sar命令可以不代任何参数,那么从默认的/var/log/sar/目录下寻找数据文件进行分析。

    例如:sar -u -f data.file -- data.file文件中获得数据并分析CPU相关的数据并显示。

<3> Options参数如下:

-A 显示所有历史数据,通过读取/var/log/sar 目录下的所有文件,并把它们分门别类的显示出来;
-b
通过设备的I/O中断读取设置的吞吐率;
-B
报告内存或虚拟内存交换统计;
-c
报告每秒创建的进程数;
-d
报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
-f
从一个二进制的数据文件中读取内容,比如
sar -f filename
-i interval
指定数据收集的时间,时间单位是秒;

-n
分析网络设备状态的统计,后面可以接的参数有 DEVEDEVNFSNFSDSOCK等。比如-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

 

详细帮助请参考man sar

3.2    CPU数据分析

可选的与CPU相关的参数有:

         -q 显示在采样的时刻,可运行队列的任务的个数,以及系统平均负载

         -u CPU 使用的情况,报告了cpu的用户态,系统态,等待I/O和空闲时间上的百分比。

         -w:每秒上下文交换率

         -I: 每秒终端数

 

命令的执行和结果:

/usr/bin # sar -q -u -I 1 1 -w

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

15:05:59      cswch/s

15:06:00        30.69

 

15:05:59          CPU     %user     %nice   %system   %iowait     %idle

15:06:00          all      0.99      0.00      5.94      0.00     93.07

 

15:05:59         INTR    intr/s

15:06:00            1      0.00

 

15:05:59      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15

15:06:00            0        34      0.04      0.05      0.00

 

执行结果说明:

-w

  cswch internal时间段里,每秒上下文切换次数

-u

  user internal时间段里,用户态的CPU时间(% ,不包含 nice值为负进程 usr/total*100

  nice internal时间段里,nice值为负进程的CPU时间(% nice/total*100

  sys internal时间段里,核心时间(% (system+irq+softirq)/total*100

  iowait internal时间段里,硬盘IO等待时间(% iowait/total*100

  idle internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 % irq/total*100

-I

  intr/s internal时间段里,每秒CPU接收的中断的次数 idle/total*100

-q

  runq-sz 采样时,运行队列中任务的个数,不包括vmstat 进程。 procs_running-1

  plist-sz 采样时,系统中活跃的任务的个数 nr_threads

  ldavg-1 采样的前一秒钟系统的负载(%) lavg_1

  ldavg-5 采样的5秒钟系统的负载(%) lavg_5

  ldavg-15 采样的前15秒钟系统的负载(%) lavg_15

 

 

3.3    内存/SWAP数据分析

可选的与内存相关的参数有:

         -B 报告page的活动数据统计;

         -r 内存和交换区占用统计;

         -R 内存使用统计

         -W 交换数据统计

命令的执行和结果:

/usr/bin # sar -r -B -R 1

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

 

15:27:44     pgpgin/s pgpgout/s   fault/s  majflt/s

15:27:45         0.00     47.52     14.85      0.00

 

15:27:44    kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad

15:27:45        16456     44468     72.99     11732     24744    131828      4716      3.45      1104

 

15:47:09      frmpg/s   bufpg/s   campg/s

15:47:10         0.00      0.00      0.00

 

/usr/bin # sar -W 1

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

 

16:24:13     pswpin/s pswpout/s

16:24:14         0.00      0.00

执行结果说明:

-B

  Pgpgin/s: 每秒磁盘page in的数量(kbytes

  Pgpgout/s:每秒磁盘page out的量(kbytes

  Fault/s:系统每秒page faultsmajor+minor)的数量

  majflt/s:系统每秒产生的major faults数量

-r  [所有的数量单位: kbytes]

KbmemfreeKbmemused%memused

内存空闲、使用了,使用的%

Kbbuffers:内核当作buffer使用的内存

Kbcached::内核当作cache data使用的内存

KbswpfreeKbswpused%swpused

Swap使用的3个值

Kbswpcad:缓存的swap空间。这个意思是:内存被swap out,又立即swap back in,但是还存在swap中,(如果memory需要,memory不需要再次swap out了,它在swap已经存在,节省了I/O)

 

-R

  frmpg/s:系统释放的内存页数量,如果是负数表示被系统分配的数量。内存页时4k8k和系统架构有关。

  bufpg/s:系统用作buffer的增量内存页

  campg/s:系统用作cache的增量内存页

 

-W

  pswpin/s : 每秒换入页数

  pswpout/s : 每秒换出页数

3.4    磁盘活动数据分析

可选的与CPU相关的参数有:

         -b 通过设备的I/O中断读取设置的吞吐率;

         -d 报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp

命令的执行和结果:

/usr/bin # sar -d -b -p 1 1

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

 

15:57:05          tps      rtps      wtps   bread/s   bwrtn/s

15:57:06         0.00      0.00      0.00      0.00      0.00

 

15:57:05          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

15:57:06       dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

执行结果说明:

-d

  DEV 设备名

  tps: 设备的每秒传输量

  rd_sec/s:设备的读的扇区数量

  wr_sec/s : 设备写的扇区数量

  avgrq-sz : 平均访问设备扇区数量

  avqu-sz : 平均请求队列长度

  await : 平均等待时间

  svctm : 平均服务时间

  %util : CPU占用百分比

-b

  Tps:物理磁盘每秒总的传输量。多个逻辑的请求可能被合并成一个单独的磁盘请求。

  Rtps:读的请求

  Wtps:写的请求

  Bread/s:每秒从磁盘读的块数

  Wread/s:每秒写的块数

3.5    进程数据分析

可选的与CPU相关的参数有:

         -c 报告每秒创建的进程数;

         -x 用于监视进程的,在其后要指定进程的PID;

         -X 用于监视进程的,但指定的应该是一个子进程ID

命令的执行和结果:

/usr/bin # sar -c 5

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

16:08:37       proc/s

16:08:42         0.00

 

/usr/bin # sar -x 375 5

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

16:22:24          PID  minflt/s  majflt/s     %user   %system   nswap/s   CPU

16:22:29          375      0.00      0.00      0.00      0.00      0.00     0

执行结果说明:

-c

  Proc/s:每秒产生的进程数量

-x

  PID  minflt/s  majflt/s     %user   %system   nswap/s   CPU

 

3.6    网络活动数据分析

可选的与CPU相关的参数有:

         -n 分析网络设备状态的统计,后面可以接的参数有 DEVEDEVNFSNFSDSOCK等。比如-n DEV

命令的执行和结果:

/usr/bin # sar -n DEV 1

Linux 2.6.12.6-arm1 (orionas.local)     05/09/07

16:12:13        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s

16:12:14       egiga0      2.97      1.98    209.90     95.05      0.00      0.00      0.00

16:12:14           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16:12:14         sit0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16:12:14         mwl0      0.00      3.96    237.62    198.02      0.00      0.00      0.00

执行结果说明:

-n DEV参数:

Network devices 的统计信息被报告

IFACE:设备名字

rxpck/s:每秒收到的包(package

txpck/s:每秒传输的包

rxbyt/s:每秒收到的字节

txbyt/s:每秒传输的字节

rxcmp/s:每秒收到的压缩包(如cslip..

txcmp/s:  每秒收到的压缩包

rxmcst/s: 每秒收到的广播包

 

-n SOCK

使用中的socket统计

Totsck 使用中的socket数量

Tcpsck tcp socket总数

Udpsck udp socket总数

Rawsck RAW socket总数

ip-frag Number of IP fragments currently in use.

 

了解如何将用户抱怨与系统活动报告程序 (SAR) 关联,并使用 SAR 日志针对趋势建立性能基准。SAR 是系统管理员的理想工具。它以周期性的间隔捕获系统性能度量。
用户总是在出现性能问题之后才想到它们。“为什么有些问题以前并不重要,而现在却变得重要了呢?”,如果忽略这样的问题,那么问题就变成了“系统在出现所谓的问题时状态如何呢?”。通过周期性地获取性能快照和查看数据,您就离确定问题的原因并创建相应的解决方案更近了一步。

收集数据

您的系统捆绑了 SAR 实用程序套件(事实上,大多数版本的 UNIX® 都安装了 SAR),但可能还没有启用。要启用 SAR,必须通过 cron 工具以周期性的间隔运行某些实用程序。在以 root 用户身份运行时,使用 crontab -e 命令,然后提供如清单 1 所示的配置。


清单 1. 以 root 用户运行 crontab 来启用 SAR 集合

# Collect measurements at 10-minute intervals
0,10,20,30,40,50 * * * * /usr/lib/sa/sa1
# Create daily reports and purge old files
0 0 * * * /usr/lib/sa/sa2 -A



第一个命令 sa1,是调用 sadc 以将性能数据收集到二进制日志文件中的一个 Shell 脚本。sa1 命令还确保了每天都使用不同的文件,我将在时间是最重要的部分中对这一点进行解释。每隔十分钟运行一次该命令,这是粒度和系统性能影响之间的折衷办法。

第二个命令 sa2,是将当日二进制日志文件中所有的数据转储到文本文件的另一个 Shell 脚本,然后它将清除七天之前的所有日志文件。参数 -A 指定了从二进制文件中提取哪些数据转储到文本文件中。尽管可以阅读文本文件以查看系统该日的状态,但我将介绍如何更精确地查询二进制日志文件。


提取有用的信息

已经收集到了相应的数据,但是必须通过查询才能使其更有价值。不带选项运行 sar 命令,这将生成关于当日 CPU 使用情况的基本统计信息。清单 2 显示了不带任何选项的 sar 命令的输出结果。(在不同的平台中,可能会看到不同的列名。在一些 UNIX 版本中,sadc 命令将根据可用的信息来收集不同的数据。)这里的示例来自于 Sun Solaris 10,无论使用什么平台都是类似的,但列名可能会稍有不同。


清单 2. sar 的缺省输出(显示了 CPU 使用情况)

-bash-3.00$ sar

SunOS unknown 5.10 Generic_118822-23 sun4u 01/20/2006

00:00:01 %usr %sys %wio %idle
00:10:00 0 0 0 100
. cut ...
09:30:00 4 47 0 49

Average 0 1 0 98



sar 命令输出中的每一行都是一项单独的度量,并且在最左边的列中显示了时间戳。其他列中则存放了相应的数据。(根据命令行所使用参数的不同,这些列也会有所不同。)在清单 2 中,CPU 使用情况被分解为四种类别:

%usr: CPU 花费在用户进程(如应用程序、Shell 脚本或与该用户进行的交互)上的时间的百分比。
%sys: CPU 用来执行核心任务的时间的百分比。在本示例中该数字比较大,这是因为我正从核心随机数生成器获取数据。
%wio: CPU 等待块设备(如磁盘)输入或输出的时间的百分比。
%idle: CPU 未进行任何有用操作的时间的百分比。
最后一行是所有数据点的平均值。然而,因为大多数系统都会在忙时间段后经历空闲时间段,所以平均值并不能反映完整的情况。

监视磁盘活动

同时,对磁盘活动也进行了监视。高磁盘使用率意味着,从磁盘请求数据的应用程序更有可能会被阻塞(暂停),直到磁盘为该进程做好准备。通常,解决方案涉及到将文件系统拆分到不同的磁盘或阵列。然而,第一步是要知道出现了问题。

sar -d 的输出显示了一个度量时间段内各种与磁盘相关的统计数据。为了更加简洁,清单 3 仅显示了硬盘驱动器的活动。


清单 3. sar -d 的输出(显示了磁盘活动)

$ sar -d

SunOS unknown 5.10 Generic_118822-23 sun4u 01/22/2006

00:00:01 device %busy avque r+w/s blks/s avwait avserv
. cut ...
14:00:02 dad0 31 0.6 78 16102 1.9 5.3
 dad0,c 0 0.0 0 0 0.0 0.0
 dad0,h 31 0.6 78 16102 1.9 5.3
 dad1 0 0.0 0 1 1.6 1.3
 dad1,a 0 0.0 0 1 1.6 1.3
 dad1,b 0 0.0 0 0 0.0 0.0
 dad1,c 0 0.0 0 0 0.0 0.0



和前面的示例一样,最左边的是时间。其他列如下:

device: 这是指正在进行测量的磁盘或磁盘分区。在 Sun Solaris 中,必须通过查找 /etc/path_to_inst 中所报告的名称将该磁盘转换为物理磁盘,然后将该信息交叉引用到 /dev/dsk 中的项目。在 Linux® 中,使用了磁盘设备的主从设备号。
%busy: 这是读取或写入设备的时间的百分比。
avque: 这是用来串行化磁盘活动的队列的平均深度。avque 的值越大,发生的阻塞就越多。
r+w/s、blks/s:这分别是用每秒的读或写操作和磁盘盘块来表示的磁盘活动。
avwait:这是磁盘读或写操作等待执行的平均时间(单位为毫秒)。
avserv:这是磁盘读或写操作所执行的平均时间(单位为毫秒)。
其中的一些数值,如 avwait 和 avserv 值,直接关系到用户体验。磁盘的高等待时间可能表示多个人正在竞争使用该磁盘,这一点可以通过高 avque 数值来证实。高 avserv 值表示磁盘的速度较慢。

其他度量

同时还收集了许多其他的项目,可使用相应的参数来查看它们:

-b 参数显示了缓冲区信息和使用缓冲区与必须写磁盘的比率。
-c 参数显示了系统调用分解为一些常用的调用,如 fork()、exec()、read() 和 write()。高进程创建会导致较差的性能,并且这是可能需要将一些应用程序转移到其他计算机的信号。
-g、-p 和 -w 参数显示了分页(交换)活动。高分页操作是内存缺乏的信号。特别地,-w 选项显示了进程切换的次数:高的数值表示计算机上运行的内容过多,该计算机在切换任务上花费了比实际工作更多的时间。
-q 参数显示了运行队列的大小,它与当时的平均负载相同。
-r 参数显示了一段时间的可用内存和交换空间。
每种 UNIX 版本都对 sar 实现了自己的度量集合和命令行参数。我介绍的这些都是比较常见的,并且代表了更加有用的元素。


时间是最重要的

到此为止,示例显示了当日的数据,它虽然具有相应的作用,但也存在着两个问题:

感兴趣的是一个小时内的数据,但获得的是一整天的。
需要返回到不同的日期。
正如前面看到的,sa1 将每天的数据保存到不同的文件中。查看 sa1 脚本,会发现所使用的目录,如果是 Sun Solaris 10,该目录为 /var/adm/sa。该目录中有一些文件,它们以“sa”或“sar”开头,后跟一个数字。这个数字表示一个月中的第几天,以“sar”开头的文件是该日数据的文本转储(由夜间运行的 sa2 所创建),而以“sa”开头的文件保存着数据的二进制版本。实际上,包含当前日期的文件是启动 sar 时所读取的文件。

为 sar 命令指定 -f 以选择要读取的文件。如果今天是一个月中的第 23 日,可以使用命令 sar -f /var/adm/sa/sa22 来读取 sa22 以查看昨天的数据。还可以传递介绍过的其他参数以访问不同类型的数据。

可以做的第二件事情是,通过使用 -s 和 -e 参数(即开始 和结束)来指定具体时间以缩小查询的范围。请注意,-s 并不是包含性的,所以必须从所选择的开始时间中多减去十分钟。继续前面的示例,清单 4 显示了交换文件的使用情况和从第 22 天的 2:30 p.m. 到 3:00 p.m 的运行队列。


清单 4. 指定了日期、时间和多数据集的复杂 sar 查询

# sar -f /var/adm/sa/sa22 -s 14:20 -e 15:00 -w -q -i 4

SunOS unknown 5.10 Generic_118822-23 sun4u 01/22/2006

14:20:00 swpin/s bswin/s swpot/s bswot/s pswch/s
14:30:00 0.00 0.0 0.00 0.0 140
14:40:01 0.00 0.0 0.00 0.0 144
14:50:01 0.00 0.0 0.00 0.0 140
15:00:00 0.00 0.0 0.00 0.0 139

Average 0.00 0.0 0.00 0.0 140
14:20:00 runq-sz %runocc swpq-sz %swpocc
14:30:00 10.5 100 0.0 0
14:40:01 10.5 100 0.0 0
14:50:01 10.4 100 0.0 0
15:00:00 10.5 100 0.0 0

Average 10.5 100 0.0 0


 了解它的所有含义

简单查看一下清单 4,它显示出交换活动为零,每秒大约发生 140 次进程切换,并且平均负载略高于 10。假设您当时正在调查较差性能的要求,那么从这些数据中可以得到什么结论呢?

因为没有发现交换过程,无论在运行什么进程,它们并没有消耗大量的内存。
该问题可能是由一组长时间运行的进程所导致,因为运行队列和进程切换相对稳定。如果以前并不是这样,那么可以怀疑是应用程序级的问题,如繁忙的 Web 服务器。
由于了解到清单 3 的输出显示了同一时间段的其他数据,您可以查看某块使用频繁的磁盘(根据 sar -b 为百分之 31,同时每秒 16,000 个盘块)。该磁盘是 home 目录分区,根据用户想要完成的任务不同,他/她可能会遇到较慢的响应。
快速查看该时间段内的 CPU 使用情况,显示出系统大约占用了百分之 80 的 CPU,剩下的用于用户任务。作为系统管理员,可以通过下面三种方式使用这一信息:

回到前几天的日志中。在本例中,我发现问题开始于 1:00 p.m.,并于第二天早上结束。
尝试将该活动与任何可能在该日开始的 cron 工作关联。
尝试找到其趋势。查看另外几天的数据,我发现性能是正常的,这并不表示系统已经达到其上限。
在本例中,看来已经将问题隔离出来了,出于该原因,我有意地使用 Shell 脚本来运转磁盘以创建一些有趣的 sar 报告!然而发现了一个趋势,如在工作时间内 home 驱动器比较繁忙,关于该问题可能存在完成某项任务的调用。可能的解决方案包括,将 home 目录拆分到其他磁盘、安装高速磁盘或将其转移到其他地方,如 Network Attached Storage (NAS)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值