使用sar进行简单的系统监视(zz)

上一篇 / 下一篇  2008-08-25 15:06:45 / 个人分类:技术&其他

 

developerWorks
 

k'G"[ U'J m0 51Testing软件测试网%`g xDnT/_Yn~$o

51Testing软件测试网3]d{_P)i Wa

 

&uTZ-zQ"W7C c|0

O#}@7j R&G}9g;Y5B+M9K0
51Testing软件测试网 hw }-uO }E l

级别: 中级51Testing软件测试网c.Z"z7T/T_k/I

51Testing软件测试网9TSh:[*Q8{b

Sean Walberg(sean@ertw.com), 高级网络工程师, P.Eng
V,t-w'X'a;{%B0

D.L{rTrg q0HD'{0

U!Gm,o8e_u02006 年 5 月 25 日51Testing软件测试网nYutqb]

了解如何将用户抱怨与系统活动报告程序 (SAR) 关联,并使用 SAR 日志针对趋势建立性能基准。SAR 是系统管理员的理想工具。它以周期性的间隔捕获系统性能度量。

]!]_(Y x A}%] uE1s0用户总是在出现性能问题之后才想到它们。“为什么有些问题以前并不重要,而现在却变得重要了呢?”,如果忽略这样的问题,那么问题就变成了“系统在出现所谓的问题时状态如何呢?”。通过周期性地获取性能快照和查看数据,您就离确定问题的原因并创建相应的解决方案更近了一步。

~ymap YT([ ?0

!C2PMo7u#~0收集数据51Testing软件测试网WD@.Yv:e t0JIY

}L w5jk3P0您的系统捆绑了 SAR 实用程序套件(事实上,大多数版本的 UNIX® 都安装了 SAR),但可能还没有启用。要启用 SAR,必须通过cron工具以周期性的间隔运行某些实用程序。在以 root 用户身份运行时,使用crontab -e命令,然后提供如清单 1所示的配置。51Testing软件测试网&fz$w u4T9x

51Testing软件测试网:UR'{oy*i+H
清单 1. 以 root 用户运行 crontab 来启用 SAR 集合51Testing软件测试网*J h)T&X&M&\0cl
# 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

kC gC^{0

A5k| us#t(U1her|0第一个命令sa1,是调用sadc以将性能数据收集到二进制日志文件中的一个 Shell 脚本。sa1命令还确保了每天都使用不同的文件,我将在时间是最重要的部分中对这一点进行解释。每隔十分钟运行一次该命令,这是粒度和系统性能影响之间的折衷办法。51Testing软件测试网&y {Z'b lTN*l

'jW\9y0Nktg0第二个命令sa2,是将当日二进制日志文件中所有的数据转储到文本文件的另一个 Shell 脚本,然后它将清除七天之前的所有日志文件。参数-A指定了从二进制文件中提取哪些数据转储到文本文件中。尽管可以阅读文本文件以查看系统该日的状态,但我将介绍如何更精确地查询二进制日志文件。

.U U+\kf-Cdz0
rLu4l)uv5C0
51Testing软件测试网2my&HS[ZR+pf

X$s c5vb-^0
51Testing软件测试网)F5E tOw3y c#V'u9i
回页首
51Testing软件测试网7i/Pl^_l-k By

pC?y|0

c u/q4xo r*H,Y(bQ0提取有用的信息51Testing软件测试网c*@ q:F/`2N HOZ8{

{+@2_0Q2G0已经收集到了相应的数据,但是必须通过查询才能使其更有价值。不带选项运行sar命令,这将生成关于当日 CPU 使用情况的基本统计信息。清单 2显示了不带任何选项的sar命令的输出结果。(在不同的平台中,可能会看到不同的列名。在一些 UNIX 版本中,sadc命令将根据可用的信息来收集不同的数据。)这里的示例来自于 Sun Solaris 10,无论使用什么平台都是类似的,但列名可能会稍有不同。

1v qWf)T`pQZ051Testing软件测试网Leqy&Eg*X&ql
清单 2. sar 的缺省输出(显示了 CPU 使用情况)51Testing软件测试网9o;xhw0l3i#?%i
-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
51Testing软件测试网%S'P/P:AYR C*S
51Testing软件测试网?+M)WWD_ sTUy

sar命令输出中的每一行都是一项单独的度量,并且在最左边的列中显示了时间戳。其他列中则存放了相应的数据。(根据命令行所使用参数的不同,这些列也会有所不同。)在清单 2中,CPU 使用情况被分解为四种类别:51Testing软件测试网S$n0s3X:E `

  • %usr:CPU 花费在用户进程(如应用程序、Shell 脚本或与该用户进行的交互)上的时间的百分比。
  • %sys:CPU 用来执行核心任务的时间的百分比。在本示例中该数字比较大,这是因为我正从核心随机数生成器获取数据。
  • %wio:CPU 等待块设备(如磁盘)输入或输出的时间的百分比。
  • %idle:CPU 未进行任何有用操作的时间的百分比。

e.P8Y*ns~0最后一行是所有数据点的平均值。然而,因为大多数系统都会在忙时间段后经历空闲时间段,所以平均值并不能反映完整的情况。51Testing软件测试网(s@ Y)\B_

51Testing软件测试网5a6]8^y6w9jh

监视磁盘活动51Testing软件测试网4fD3B~gWB

51Testing软件测试网#h C P-yz&M\

同时,对磁盘活动也进行了监视。高磁盘使用率意味着,从磁盘请求数据的应用程序更有可能会被阻塞(暂停),直到磁盘为该进程做好准备。通常,解决方案涉及到将文件系统拆分到不同的磁盘或阵列。然而,第一步是要知道出现了问题。

E5v%OO v ]0[ Y d051Testing软件测试网%a|.Ow.A

sar -d的输出显示了一个度量时间段内各种与磁盘相关的统计数据。为了更加简洁,清单 3仅显示了硬盘驱动器的活动。

b9|,`&j Q:Bwg7B051Testing软件测试网:d#H#I(eMV
清单 3. sar -d 的输出(显示了磁盘活动)
dwc8[q@0
$ 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

t1`3Xh^8{OL-{a051Testing软件测试网-K0nW[/m.{O

和前面的示例一样,最左边的是时间。其他列如下:51Testing软件测试网 Xp"s-H7U2[NI{

  • device:这是指正在进行测量的磁盘或磁盘分区。在 Sun Solaris 中,必须通过查找 /etc/path_to_inst 中所报告的名称将该磁盘转换为物理磁盘,然后将该信息交叉引用到 /dev/dsk 中的项目。在 Linux® 中,使用了磁盘设备的主从设备号。
  • %busy:这是读取或写入设备的时间的百分比。
  • avque:这是用来串行化磁盘活动的队列的平均深度。avque 的值越大,发生的阻塞就越多。
  • r+w/s、blks/s:这分别是用每秒的读或写操作和磁盘盘块来表示的磁盘活动。
  • avwait:这是磁盘读或写操作等待执行的平均时间(单位为毫秒)。
  • avserv:这是磁盘读或写操作所执行的平均时间(单位为毫秒)。
51Testing软件测试网Y`.M+B-wO @3W

其中的一些数值,如avwaitavserv值,直接关系到用户体验。磁盘的高等待时间可能表示多个人正在竞争使用该磁盘,这一点可以通过高 avque 数值来证实。高 avserv 值表示磁盘的速度较慢。

$C7BE U K0

oB"n(K-?5xmB0其他度量51Testing软件测试网[ |!HmB,N

"C3M jOp0同时还收集了许多其他的项目,可使用相应的参数来查看它们:

u'^6| t5} L$u0
  • -b参数显示了缓冲区信息和使用缓冲区与必须写磁盘的比率。
  • -c参数显示了系统调用分解为一些常用的调用,如fork()exec()read()write()。高进程创建会导致较差的性能,并且这是可能需要将一些应用程序转移到其他计算机的信号。
  • -g-p-w参数显示了分页(交换)活动。高分页操作是内存缺乏的信号。特别地,-w选项显示了进程切换的次数:高的数值表示计算机上运行的内容过多,该计算机在切换任务上花费了比实际工作更多的时间。
  • -q参数显示了运行队列的大小,它与当时的平均负载相同。
  • -r参数显示了一段时间的可用内存和交换空间。

w)E@2j%e0每种 UNIX 版本都对sar实现了自己的度量集合和命令行参数。我介绍的这些都是比较常见的,并且代表了更加有用的元素。

d4}Zw\aj2R3j051Testing软件测试网t'r!w+OUQ
51Testing软件测试网6y*c v1F8[$Nt@8v
51Testing软件测试网I!J N,b8SA

[AD Gh2^7f0
回页首
51Testing软件测试网{1pb[-S:["_B
51Testing软件测试网C}l*d2r+xP

8YG PHEJRZ0时间是最重要的

qP8AqF"\6E6_051Testing软件测试网 Vb,^s,^P2|

到此为止,示例显示了当日的数据,它虽然具有相应的作用,但也存在着两个问题:51Testing软件测试网daS&_W|*rj

  • 感兴趣的是一个小时内的数据,但获得的是一整天的。
  • 需要返回到不同的日期。
51Testing软件测试网V6s+O]%hLw1p

正如前面看到的,sa1将每天的数据保存到不同的文件中。查看sa1脚本,会发现所使用的目录,如果是 Sun Solaris 10,该目录为 /var/adm/sa。该目录中有一些文件,它们以“sa”或“sar”开头,后跟一个数字。这个数字表示一个月中的第几天,以“sar”开头的文件是该日数据的文本转储(由夜间运行的sa2所创建),而以“sa”开头的文件保存着数据的二进制版本。实际上,包含当前日期的文件是启动sar时所读取的文件。51Testing软件测试网9P0PPi)Z']:s

5V%X,kh]On7n0sar命令指定-f以选择要读取的文件。如果今天是一个月中的第 23 日,可以使用命令sar -f /var/adm/sa/sa22来读取sa22以查看昨天的数据。还可以传递介绍过的其他参数以访问不同类型的数据。

G%Z(P7Dw3{3i0

?]1}w ur^8Gh0可以做的第二件事情是,通过使用-s-e参数(即开始结束)来指定具体时间以缩小查询的范围。请注意,-s并不是包含性的,所以必须从所选择的开始时间中多减去十分钟。继续前面的示例,清单 4显示了交换文件的使用情况和从第 22 天的 2:30 p.m. 到 3:00 p.m 的运行队列。51Testing软件测试网)q*K&N)u|4w[

51Testing软件测试网P)Ul-u$jr
清单 4. 指定了日期、时间和多数据集的复杂 sar 查询51Testing软件测试网|$Y4iX$g\2a
# 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

J*N'T };V lh.H0
i#Sl!yF3s-o0
51Testing软件测试网 Pe2VQ&S;IYF7r(V"i

d2Ki"N f7`^Q$r0

BvYIA(mj0
回页首

(kM Eu0Z0D&r,Ie0
"n@$v-E;p e0

`(fG8b:V9I3~0了解它的所有含义

"tL0v%WjKZS051Testing软件测试网*f i2Dt1L)cR/KP!n

简单查看一下清单 4,它显示出交换活动为零,每秒大约发生 140 次进程切换,并且平均负载略高于 10。假设您当时正在调查较差性能的要求,那么从这些数据中可以得到什么结论呢?51Testing软件测试网9T+kAa'Fkzn

  • 因为没有发现交换过程,无论在运行什么进程,它们并没有消耗大量的内存。
  • 该问题可能是由一组长时间运行的进程所导致,因为运行队列和进程切换相对稳定。如果以前并不是这样,那么可以怀疑是应用程序级的问题,如繁忙的 Web 服务器。
  • 由于了解到清单 3的输出显示了同一时间段的其他数据,您可以查看某块使用频繁的磁盘(根据sar -b为百分之 31,同时每秒 16,000 个盘块)。该磁盘是 home 目录分区,根据用户想要完成的任务不同,他/她可能会遇到较慢的响应。
51Testing软件测试网3N,r;@0kH1Nw }bf$k

快速查看该时间段内的 CPU 使用情况,显示出系统大约占用了百分之 80 的 CPU,剩下的用于用户任务。作为系统管理员,可以通过下面三种方式使用这一信息:51Testing软件测试网N:q9{F"q(`H

  • 回到前几天的日志中。在本例中,我发现问题开始于 1:00 p.m.,并于第二天早上结束。
  • 尝试将该活动与任何可能在该日开始的cron工作关联。
  • 尝试找到其趋势。查看另外几天的数据,我发现性能是正常的,这并不表示系统已经达到其上限。
51Testing软件测试网F&bqJ/p:ACx

在本例中,看来已经将问题隔离出来了,出于该原因,我有意地使用 Shell 脚本来运转磁盘以创建一些有趣的sar报告!然而发现了一个趋势,如在工作时间内 home 驱动器比较繁忙,关于该问题可能存在完成某项任务的调用。可能的解决方案包括,将 home 目录拆分到其他磁盘、安装高速磁盘或将其转移到其他地方,如 Network Attached Storage (NAS)。

#x7O g%K;FM/Egu051Testing软件测试网v P%o X'e
51Testing软件测试网 t|g vuZ

'V jzcWX6Fi0
51Testing软件测试网/N7GDS'MM];a
回页首
51Testing软件测试网d)pIpf*yP D1X

%eFcqW3Up0

9pduC7]b${an0结束语51Testing软件测试网"HnJ[ _Fx

51Testing软件测试网+p_GgQ b5f9H|

以周期性的间隔获取关于系统的定性数据,这是查找性能瓶颈并确定是否需要进一步操作的有效方法。可以使用 SAR 及其相关实用程序来完成这项任务,每隔十分钟获取一次快照并使用前端工具来访问这些数据。尽管实际上需要一定的策略,但系统管理员可以使用所提供的大量信息来发现系统中出现的问题,以及确定是否需要进行进一步的调查工作。51Testing软件测试网7Q8}bM@u!v


TzXW4BC5r0

TAG:

 

评分:0

我来说两句

Open Toolbar