Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235460
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 211
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-05 23:07
文章分类

全部博文(51)

文章存档

2016年(11)

2015年(14)

2014年(4)

2013年(22)

我的朋友

分类: 系统运维

2016-01-26 17:56:53

性能监测工具

HPUX中很多种不同的性能工具。有些工具提供实时的性能信息,其他还有一些在后台收集信息供后续的分析。还有一些工具允许系统参数被调整优化。

 

这一章节的目的是简介各个工具是如何工作的,可以作为选择工具的一个快速的参考。

 

注意:这里不包括如何解释工具的输出

 

标准的UNIX工具

标准的工具是在UNIX base系统上常见的工具,使用标准工具的优点是可以和其他平台上相应工具的结果进行对比。

 

HPUX特有工具

HPUX特有工具是由HP开发的。这些工具通常在其他UNIX平台上是没有的。这样的工具包括像Glance,Measureware,PerfView,NNM和ITO。

 

注意:本文档中不包含对HPUX特有工具的介绍

 

sar

Sar = System Activity Reporter

 

Sar工具用来收集一段时间的性能数据(常在cron job中使用),或是实时显示。

 

当用来采集一段时间的数据时,常用的是sar相关的命令,sa1和sadc. Sadc是真正用来收集数据的程序,sa1实际上是一个前端程序,每隔几秒种,重复n次来调用sadc.

 

采样性能数据时,sar对kernel中的变量(也叫计数器)进行采样,包括了资源的请求数、资源的IO访问数、队列长度等。

 

Sar命令的报告通常用于观察系统中在发生什么,瓶颈在哪里。

 

 

sar – 采样数据

HPUX性能优化工具的使用 (2) --- sar

sar对指定周期内的数据采样,可以在crontab里定期进行,也可以由用户发起。

 

通过crontab来进行,有助于分析一个长期的系统状态。有两种可能的方式:sadc或是sa1.

sadc每隔t秒,进行n次,来收集数据,并输出到一个二进制的文件(ofile). 如果输出文件名没有指定,就输出到标准输出(也就是终端屏幕上)。 如果t和n也没有指定,sadc会写一条特定的记录,用来在系统启动时标记计数器归零的时间。

 

sa1用t和n参数调用sadc,把输出结果写到/usr/adm/sa/sadd中,其中dd是当时的日期。如果t和n没有指定,sa1会传递t=1,n=1.

 

sar命令可以按照时间间隔采样,输出到文件中(如果指定了),在标准输出上显示报告。如果n参数没指定,就只采样一次。

 

sar – 报告数据

HPUX性能优化工具的使用 (2) --- sar

数据收集到以后,有不同的方式来生成报告。如果要自动做,可以用sa2在crontab里运行。sa2是一个脚本程序,调用sar命令,通过较早前收集并存放在/var/adm/sa/sardd的二进制文件生成报告。具体是哪一种类型的报告,通过选项来确定(-ubdyswaqvmA).  同样地,时间区域可以通过指定开始时间(-s time)与结束时间(-e time)来确定。时间间隔也可以用(-I seconds)来指定,这个间隔可以与收集数据时的时间间隔不同。

 

用sar命令可以交互式地完成,与sa2的选项相同,再加上(-f file)来指定输入文件。 如果没有指定输入文件,默认采用/var/adm/sa/sadd. 报告会输出到标准输出上。

 

sar – 命令的调用

Sample crontab entries:

0 * * * 0,6                  /usr/lbin/sa/sa1

0 8-17 * * 1-5   /usr/lbin/sa/sa1 1200 3

0 18-7 * * 1-5   /usr/lbin/sa/sa1

User invocation:

sar -A -o sar.out 1 3600>/dev/null &

sar -b -f sar.out

 

上面的crontab条目可以生成供后续分析的二进制文件,例子里列出来的情况会在每个周六与周日的整点,工作日的工作时间内每20分钟,工作日的下班时间内每小时 来收集数据。

 

第一行用户调用的例子会每秒收集数据,时长为1小时,将输出结果写到sar.out中,是二进制的格式。因为命令会同时输出到标准输出上,所以把它重定向到/dev/null,在后台运行。

第二行用户调用的例子会生成一个buffer 活动的报告,数据源是前一个例子里生成的文件。

 

sar – CPU利用率

?    sar -u

?    %usr = time spent in user mode

?    %sys=time spent in system mode

?    %wio=time spent in block, raw, and virtual memory management I/O

?    %idle=CPU time not being used

?    sar -uM:  option for multiprocessor platforms.

 

sar –u会报告CPU的整体利用率。它报告在用户模式下CPU的时间(%usr),系统模式下(%sys),块设备、裸设备和虚拟内存管理的IO(%wio),还有其他的空闲时间(%idle). 每行显示一个时间间隔内的数据,最后会有一行平均值。

 

先看%idle是不是接近0. 如果%idle接近0,就看%wio是不是大于7. 如果是的话,就要研究是不是有IO的瓶颈。

 

如果%wio很低,但是%idle并不是0,就要研究%usr和%sys。如果大部分时间用在%usr,可能是用户应用引起的CPU瓶颈。这些应用要检查一下为什么占这么多CPU时间。如果是%sys占用了大部分时间,就要分析系统为什么占用这么多时间。其他的可能性,比如说太多磁盘swapping操作,可能用很多系统时间。

 

在多CPU环境加上-M选项。

 

sar – CPU利用率的例子

07:00:01

%usr

%sys

%wio

%idle

08:00:01

8

5

6

82

09:00:01

7

20

43

31

10:00:01

4

11

19

67

11:00:01

9

10

47

34

12:00:01

1

3

1

95

13:00:01

1

3

2

95

Average

5

9

20

67

Suggested

Ratios

 

60

 

25

 

0

 

15

 

这个例子中,从07:00AM到01:00PM每小时收集一次数据。输出是通过cron生成的。sar需要大概2%的负载来完成这样的事。

 

建议的比率是一个粗略的估算,太高的比率通常指示下列性能瓶颈。

 

%usr:        CPU 瓶颈

%sys:   内存瓶颈 (paging and/or swapping is occurring)

%wio         I/O 瓶颈 (external disk access, read/write to tape)

 

所谓’瓶颈’可能是一个暂时的现象,比如说备份到磁带上时%wio比较高。许多时候合理地安排对性能有强需求的事务可以解决性能问题,比如安排在晚上用户数少的时候进行备份。

 

sar – 磁盘的活动

 

?    sar -d

?    %busy=portion of time a device was servicing transfer request(s)

?    avque=average number of requests outstanding

?    avwait vs. avserv

 

sar –d报告每个硬盘或磁带驱动器块设备的活动(黄金甲按:原文如此,存疑,裸设备的利用率是可以看到的). 它显示设备文件名,忙于传输请求的时间(%busy),在这个期间outstanding的请求的数目(avque),每秒钟数据传输的数据(r+w/s),传数的数据量的大小,以512字节的块为单位(blks/s),在队列中等待的平均时间,以毫秒为单位(avwait),提供服务的时间,以毫秒为单位(avserv).

 

如果一个硬盘设备的%busy>50,就存在硬盘的瓶颈。如果avwait>avserv,也说明有硬盘的瓶颈。 avque指示有多少任务在队列中等待。

 

在观察sar –d输出时,一个优化的系统应该显示不同硬盘之间的负载比较均衡。

 

sar – 磁盘的活动的例子

15:31:55

device

%busy

avque

r+w/s

blks/s

avwait

avserv

15:32:00

c0t5d0

85

2.9

31

248

51

27.2

15:32:05

c0t6d0

1

1.2

0

1

5

30

c0t5d0

84

3.4

29

232

71.3

29.3

15:32:10

c0t6d0

0

1

0

1

5

30

c0t5d0

89

3.5

31

245

74.1

29.1

15:32:15

c0t5d0

82

2.7

30

242

47

27.2

15:32:20

c0t5d0

82

2.8

29

235

51.7

28

Average

c0t6d0

c0t5d0

0

1.1

0

0

3.3

23.3

Average

85

3.1

30

30

58.9

28.1

 

这个例子显示的是用-d选项来运行sar命令。每5秒收集一次,共20秒。

 

例中,第一个硬盘非常繁忙,而第二块硬盘则很空闲。所以第一块硬盘存在瓶颈。这是一个很好的负载不均衡的例子。

 

IO瓶颈的指示可以归纳为:

 

%busy >50

avwait > avserv

 

sar – buffer activity

?    sar -b

?    %rcache=read cache hit ratio

?    %wcache=write cache hit ratio

?    pread/s & pwrit/s are generally obsolete due to the lack of dumb terminal use

 

sar –b报告系统缓冲区的情况。提供了每秒传送的数据块的数量(bread/s,bwrit/s),每秒对缓冲区读写的数量(lread/s,lwrit/s),cache命中率%rcache=(1-bread/lread)*100, %wcache=(1-bwrit/lwrit)*100),每秒以raw模式传送的数量(pread/s,pwrit/s). pread/s和pwrite/s还可以用来指示裸设备的访问,数据库经常会选择使用裸设备。

 

主要关注的参数是%rcache和%wcache. 要想获得理想的性能,%rcache要高于90,%wcache高于70。

 

sar – buffer activity例子

###

bread/s

lread/s

%rcache

bwrit/s

lwrit/s

%wcache

15:31:55

0

286

100

24

93

74

15:32:00

0

114

100

20

57

65

15:32:05

0

467

100

34

129

74

15:32:10

0

114

100

2

22

92

15:32:15

2

430

100

39

148

73

Average

1

282

100

24

90

76

 

本例中,有很好的cache命中率。对于进行很多随机IO操作,或是buffer cache很少的系统,这些比率可能会比较低。

 

指示IO瓶颈的一个快速参考是:

?    %rcache < 90

?     %wcache < 70

 

sar – swapping activity

?    sar -w

?    swpin/s & bswin/s= units transferred by swapins per second

?    swpot/s & bswot/s= units transferred by swapouts per second

显示以block为单位(512字节)每秒传输的swapin(swpin/s,bswins/s)和swapout(swpot/s,bswot/s),还有每秒钟进程切换的数量(pswch/s).

 

swpot/s大于0就需要继续分析

 

sar – swapping activity的例子

 

Swpin/s

Bswin/s

Swpot/s

Bswot/s

Pswch/s

###

7.7

90

45

2304.7

1327

###

22

272

23

1190

1307

###

29

483

16

760

1519

###

24

490

15

769

1345

###

27

590

18

990

1681

Average

22

385

24

1202

1436

本例中,平均每秒有22个进程swapin,24个进程swapout,还有很高的进程切换。这说明内存很紧张。内存的使用情况需要被关注,这个例子里是有程序使用了大量数据空间(大形的阵列)造成了瓶颈。

 

要是主机内存很充沛,上面swpin/s,bswin/s,swpot/s和bswot/s都会是0. 适当的进程切换是可以接受的,比如说小于50.

 

指示内存瓶颈的指标是:

swpout/s > 0

 

sar – 队列长度

?    sar -q

?    runq-sz=length of the run queue

?    %swpocc=percentage of time the swap queue was occupied

这个选项给出运行队列的长度(runqsz),运行队列被占用时间的百分比(%runocc),swap队列的长度(在swap设备上准备运行的进程的数量)(swpq-sz),还有swap队列被占用时间的百分比(%swpocc).

 

这些数值都是越小越好。如果run-sz大于4或是%swapocc大于5,sar –q的输出就需要和sar –w的输出对照分析

 

sar – 队列长度的例子

15:00:10

runq-sz

%runocc

swpq-sz

%swpocc

15:01:10

42.6

100

17.8

60

15:02:10

41.5

101

21

101

15:03:10

43.2

99

23.3

99

15:04:10

35.7

100

31.4

100

15:05:10

43.1

103

40.3

102

15:06:10

36.8

99

42.9

99

 

本例中,有大量进程在运行队列中,队列的占用率接近100%。 这说明主机内存紧张,正在进行过度的swapping. 大量的swapping操作也会使得sar –u的输出中%sys偏高。

 

内存充足的系统中,swpq-sz和%swpocc接近空值。适度的运行队列长度是可以接受的(<5)

 

指示内存瓶颈的指标:

?    runq-sz > 4 (across all CPUs)

?     %swpocc > 5 (across all CPUs)

 

sar – 系统调用 System Call

?    sar -c

?    scall/s=number of system calls per second

?    fork/s=number of fork/vfork system calls per second

?    exec/s=number of execs per second

 

它给出每秒进行的系统调用的次数(scall/s),读系统调用的次数(sread/s),写系统调用的次数(swrit/s),fork与vfork操作的次数(fork/s),exec调用的次数(exec/s),读写调用的字符数量(rchar/s,wchar/s).

 

如果系统调用的总数很高,需要进行分析,因为这会造成CPU的%sys变高。通过观察fork/s和exec/s可以看到时系统中生成的进程数。

 

 

sar – 系统调用的例子

1:29:48

scall/s

sread/s

swrit/s

fork/s

exec/s

rchar/s

wchar/s

1:29:53

116

13

41

0

0

373965

18432

1:29:58

68

10

42

0

0

614

0

1:30:03

69

10

41

0

0

7168

4096

1:30:08

67

10

41

0

0

819

0

1:30:13

67

10

41

0

0

1843

0

Average

77

11

41

0

0

76882

4506

 

本例中,每25秒收集一次数据。平均的系统调用数为77(scall/s),这是一个中等的数字。另外,没有新的进程生成(fork/s和exec/s).

 

rchar/s和wchar/s在今天已经基本没用了。这一区域一般是与哑终端相关

 

指示CPU瓶颈的指标:

?    scall/s > 3000

?     fork/s

?     exec/s

 

sar – 系统表 System Tables

?    sar -v

?    The only tool (other than HP GlancePlus/UX that reports on system tables.

?    ov = overflows

这是除了Glance之外唯一可以报告系统表的工具,显示主要的系统表的大小和占用的条目。它给出文本表的已占用条目数/大小(text-sz),采样时间内溢出的数目(ov),进程表空间的已占用条目数/大小(proc-sz和ov),还有inode表相关的(inod-sz和ov).

 

如果存在溢出的情况,控制台上与syslog.log中会有报错信息。用sar工具,可以观察不同时间段内各种表的占用情况。

 

sar – 系统表 System Tables的例子

0:00:00

text-sz

ov

proc-sz

ov

inod-sz

ov

file-sz

ov

1:00:00

29/76

0

75/276

0

137/356

0

113/590

0

2:00:00

27/76

0

75/276

0

138/356

0

113/590

0

3:00:00

28/76

0

75/276

0

135/356

0

113/590

0

4:00:00

29/76

0

75/276

0

142/356

0

117/590

0

5:00:00

29/76

0

75/276

0

148/356

0

113/590

0

6:00:00

30/76

0

79/276

0

144/356

0

121/590

0

本例中,基本上所有的表都没用到一半。

 

如果存在溢出overflow,ov会大于0。

 

sar – 文件访问的报告

?    sar -a

?    iget/s=number of file system iget() calls per second

?    namei/s=number of file system lookuppn() (pathname translation) calls per second

?    dirblk/s=number of file system blocks read per second doing directory lookup

 

给出每秒执行iget例程的数量(iget/s) (这时读了多少inode);vfs_lookup例程被调用的数量(namei/s,就是路径解析的数量),还有目录块被读取的数量(dirbk/s).

 

sar – Message与信号量(semaphore)的报告

?    sar -mS

?    msg/s=Number of System V msgrcv() calls per second.

?    sema/s=Number of System V semop() calls per second.

?    select/s=Number of System V select() calls per second.  Requires "-S" option.

 

它给出每秒钟通过进程间message机制传送的message数量(msg/s)和进程间通信的semphore的数量(sema/s). sema/s值在semop()例程中被增加,这个例程是用来获取和释放semaphore的。所以,这个值至少是semaphore数量的两倍。

 

sar – 其他选项

?    sar -y:  tty device activity

?    sar -A:  reports ALL data options

sar –y报告tty设备的活动。It reports on the input character rate (rawch/s), the input character rate processed by canon (canch/s), the output character rate (outch/s), the characters presented by mux (rcvin/s), and the number of output characters processed and passed on to the mux (xmtin/s).

 

sar –A报告所有数据,相当于把其他的所有选项都选上。

 

 

阅读(2283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~