HPUX性能优化工具的使用
黄金甲按:这篇文档相当老,内容也不是很深入。原文是一套叫Unix Performance Tools Notebook的slide. 优点是介绍了除Glance之外的一些Unix通用的工具,还是有些用处。
目录
HPUX性能优化的基本概念 (1)
HPUX性能优化工具的使用 (2)
--- sar
HPUX性能优化工具的使用 (3)
--- iostat/vmstat/netstat/lanadmin/time/ps/kill/showmo
HPUX性能优化的基本概念 (1)
影响性能的因素
? 硬件
? 操作系统
? 应用软件
? 人
? 变更
? 上述内容是如何管理的
? 网络
? 环境
系统硬件资源
计算机系统的核心部件包括:
? CPU:执行指令的硬件
? 内存:程序与它们的数据被加载的地方
? 硬盘:程序与数据在未被CPU使用时存放的地方
? 网络:计算机之间的接口
其他的部件包括
? 终端
? 磁带机
? 打印机
? 图形系统等
HPUX操作系统
操作系统管理用户应用的硬件资源,将用户需求转换成硬件认识的指令。
HPUX kernel基于Berkeley 4.2,增加了AT&T System V的兼容接口。
HPUX在两个级别执行,user和kernel. 在user级别,系统用户可以与OS交互,输入命令调整kernel的运作。
User级别与Kernel级别通过系统调用接口连接。
作为一个Unix系统,HPUX支持多用户与多任务。性能与用户数、用户任务的类型,OS的配置等相关。
处理器模块
一个典型的HP处理器包含中央处理单元(CPU),cache,Translation look-aside buffer(TLB),协处理器,Special function unit(SFU).这些单元通过总线相联。
Cache(高速缓存)是高速的记忆体(通常访问时间在10-20纳秒,一般的记忆体在80-150纳秒)。高速缓存可以在一个CPU时钟周期内访问,存 储CPU最近访问过的,或是预测将要被访问的指令或是数据。缓存的大小可以比CPU的主频对性能产生更大的影响。不同的CPU有不同的缓存大小。
Translation look-aside buffer(TLB)用来将虚拟地址转换为物理地址。它实质上是一种高速缓存,包含最近访问过的虚拟地址与物理地址对应关系及访问权限和访问ID。 TLB是内存中系统级别的转换表的子集。 TLB的大小也会影响系统的性能,不同的CPU也有不同的TBL大小。
TLB通常指示一页内存,而不是某一个点。
HPUX进程的流程图
用户通常通过终端(Terminal)来访问主机,通过命令与进程来完成特定的任务。进程在用户输入命令或运行程序以后开始。
CPU将命令移动到内存中,也是它开始执行的地方。将命令移到内存中的时间取决于三个因素。 1. 数据存在哪里?如果是在buffer cache中,CPU可以快速访问到。 2. CPU处理指令有多快?3. 命令需要的资源是否空闲?
如果命令需要硬盘上的数据,也许需要在队列中等待被其他进程使用的硬盘。
总的流程可能包括一些CPU的运算、几页的内存和一些对硬盘的读写操作。每一步都需要时间。从系统性能管理的角度来看,不是关心完成操作总共用了多少时间,而是看在哪时以及如何消耗了时间。
进程的状态
进程有五个主要的状态:
SRUN: 进程可以运行或是正在运行,在kernel模式,内存中或是swap设备上。
SSLEEP: 进程正在等待某个事件,在内存中或是swap设备上。
SZOMB: 进程已经释放了除了进程表条目(process table entry)之外的全部系统资源。这个状态不会再改变。
SIDL: 进程正在被fork 或是 exec生成.
SSTOP: 进程被任务调度或是进程跟踪系统停止,等待继续。
CPU调度的概念
CPU Scheduler:调度各进程对CPU的使用。
System Clock: 系统时钟
Interrupt Handler:中断管理,执行时钟中断,收集系统的统计信息。Context Switching:上下文切换, 保存进程的信息,这样进程就可以在中断后开始运行或是继续运行(如果被中断了).
CPU调度
CPU调度处理下面的事项:
? 上下文切换
? 中断
当所需的资源就绪后,进程就等待CPU调度程序安排CPU的时间(来运行)。
CPU的调度是多任务、多用户环境的基础。 通过在不同的、等待资源如其他的事件、IO等的进程之前切换CPU,操作系统可以处理更多的任务。
HPUX使用轮循调度。CPU让每个进程运行一个预设的时间段,称之为quantum 或是时间片,直到它结束或是被其他进程占先运行。CPU保存前一个进程的状态到一个”context”中,切换到下一进程。第一个进程被放到待运行队列的最后,等待下一次被运行。
作为一个多任务的系统,HPUX需要一些变化来做进程间的切换。这个机制通过中断CPU来切换优先级。时钟中断实现几个功能,它收集系统统计信息,进行上下文切换(context switching). 系统的性能取决于这些操作能否高速有效地进行。
上下文切换发生的条件
? 时间片到期
? 进程退出
? 进程将自己置于sleep或是stopped状态
? 进程由系统调用中返回到user mode,但已不是最优先的进程
? 另一个实时优先的进程到了运行的时间
系统调用
当一个进程进行了系统调用后,一系列的流程要进行,这样进程可以在kernel mode中执行系统代码。
优先级队列
运行队列run queue
? POSIX Real Time
n 1 wide
? HP-UX Real Time
n 1 wide
? Time Share
n 4 wide
运行队列的‘宽度’是不同的。宽度是指一个队列中优先级值的范围。
例如,在time-share级别的队列中,在优先级178到181(宽度为4)之间有一个队列。在这个队列中的所有进程都是同等对待,不管它的优先级实 际上是多少,所以一个优先级为181的进程有可能比优先级178的进程得到更快的处理。这个功能只在某一个运行队列中生效。位于182-185队列中的进 程不会比位于178-181队列中的进程获得更高的优先。
“bestq”指向队列中下一个进程,这个机制是为了提高运行队列的效率。否则,运行队列就必须查询每一个进程的优先级来确认是否还有其他进程需要优先运行。
多处理器运行队列
多处理器环境下每个CPU管理自己的运行队列。但是,POSIX run time可以让所有的CPU都运行队列中的进程,换句话讲,一个CPU可以运行初始在另一CPU的运行队列中的进程。
处理器时间共享
分享处理器时间的进程初始状态下都被分配了相同的优先级。用户可以通过nice的赋值适度调整。
如前所述,分享时间的进程在执行后失去优先级,等待到它的下次执行机会时重新获得优先。进程失去优先级的机率是线性的,但是它重获优先的机会是指数特性的。当CPU负载高时,这个指数值下降。CPU负载低时,这个值升高。
一个进程的nice值被用来作为计算重获优先级的因子。所认,在CPU负载低的时候,nice值的基本没什么作用,相反,在CPU负载高时影响就大了。
Nice的赋值可以让某一个进程获得更低优先级。默认值是20. 要让一个进程在更低的优先级运行,可以把nice的值赋高一些,比如说39。
超级用户可以通过赋一个低的nice值给某一个进程,让它在更高的优先级别运行。
时间片/时间轴
一个时间片等于10个‘tick’。每个正在运行的进程每隔4个’tick’会重新计算它的优先级。 优先级的计算基于每个进程使用的CPU时间总合。
在时间片结束后,系统决定哪个进程获得CPU。
每一秒钟,每个进程都被重排优先级。
内存管理
当一个进程开始后,就被CPU指向内存来获取所需的数据。
内存访问可能只需通过buffer cache或是由磁盘上进行page in的操作。 如果所需的数据在一个硬盘上,而其他的进程正在访问硬盘,这个进程就要在一个队列里等待访问这个硬盘。
内存管理的含义是OS中管理内存的这一部分,它跟踪内存的哪一部分是可用的或是被占用的,为进程申请内存,管理进程的去激活。
内存管理的相关概念
Paging: 虚拟内存空间(叫pages)中的内容由虚拟内存(硬盘)移动到或是移出主内存的技术
Page Fault: 当CPU要访问一个内存中的页面时,它还没有从硬盘(虚拟内存)page in到主内存时,会发生的一个非法地址错误,或是陷阱。这个页面有可能在这个访问需求之前由主内存中page out了。
Deactivation:去激活,将一个进程由交换区移到到主内存中,和由主内存移动到交换区的过程
Thrashing: 系统颠簸 ,是这样的一种情况,进程被page in/page out的时间,比它本身处理进程本身的内容时间还长,大量的page fault出现。
内存管理:paging
处理page操作的后台进程每0.03秒运行一次。 如果空闲内存比LOTSFREE定义的值少,pageout例程就被调用。
Pageout使用‘双手’时钟算法来确定空闲的内存。这个进程在HPUX中叫’vhand’. ‘age’ hand对每一个内存页面对应的标志位进行老化操作(黄金甲按:我的理解是按一个间隔递增它的值)。如果第二只手扫描到这个标志位时它的值仍然是0,那这 个页面就是空闲的,说明在第一只手扫过它之后没有被标志过。如果这个页面是干净的(没有被修改过的),它就被加到freelist中。 如果这个页面是脏的(修改过的),在被放到freelist之前需要把它的内容写到交换设备上。
‘手’旋转的速度取决于预期的内存需求。 剩余内存越少,扫描的速度越快。当paging操作过多时,deactivation就开始了。
内存管理:paging和Deactivation
Lotsfree, gpgslim, desfree, minfree,这几个值在系统启动时计算,每台主机根据内存大小的不同计算出来的值也是不一样的。
当可用内存少于Lotsfree以后,对页面的老化(aging)操作就开始了。然后,当剩余内存低于gpgslim, 窃用(stealing)操作就开始了。内存紧张时系统可能调整gpgslim的值。其他的值都是维持不变的。
当可用内存低于desfree以后,系统会非常积极地尝试空出内存,paging是必要的。这时,系统可能会调整双手算法尝试让内存使用稳定一些。这可能包括加速双手算法的过程,减少’老化’与’窃用’之间的时间间隔等。
当可用内存低于minfree之后,进程的deactivation开始。内存已经相当紧张,到了基本上无法恢复的阶段。
文件系统 – 全局图
虚拟文件系统virtual file system(VFS)的概念被引入来处理网络上的文件系统。每个文件系统类型有其自己的VFS。 相似的,每个文件有虚拟文件结点virtual file node(vnode),就像旧的文件系统有inode一样。 每个本地文件系统的vnode指向inode,NFS的vnode指向remote node(rnode).
Inode是指向数据块的指针。 Vnode代表多种文件系统,指向一个inode.
注意裸设备不使用buffer cache.
文件访问
在这个例子里,要取得命令行中命令所需的数据,进程必须要访问硬盘上的文件。文件系统的结构类似于相面的框图。对于系统的用户来说,文件系统结构组织在一个树形结构下,从/开始。
文件系统是操作系统软件控制数据存放的部分,控制了数据是如何存放的,如何被内存管理识别。
每一个文件系统中的文件由一个inode表示。一个inode长128字节。它包含了必要的信息来控制访问,比如说文件大小、权限、属主和物理数据块的地址。HPUX通过inode实现文件的安全控制。
因为inode了解数据存放的情况,所以对文件的所有访问都先访问inode.
磁盘的输入、输出
这些硬盘的特性与文件系统相关:
? 如何提高buffer cache的命中率来减少对硬盘的访问。
? 如何使用文件系统参数如block和fragment size,minfree,rotdelay等来控制文件的分布,优化访问时间。
? 如何均衡分布硬盘的负载
对文件系统的访问,CPU并不直接由硬盘读取或写入。如果硬盘传输率低,文件系统的响应时间与输出就会很差。Kernel通过buffer cache来尽量减少对硬盘的访问。
Buffer cache的大小可以通过nbuf和bufpages参数来调整(黄金甲按:在11.31中因为UFC的使用这两个参数已经没用了)。
HPUX性能优化工具的使用 (2)
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命令的
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
通常用于观察系统中在发生什么,瓶颈在哪里。
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 – 报告数据
数据收集到以后,有不同的方式来生成报告。如果要自动做,可以用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).
**man sar 其中对-d参数中r+w/s的解释是 r+w/s Number of data transfers per second (read and writes) from and to the device.很明显是说完成的IO数量
实验:
dd if=/dev/rdisk/disk3 of=/dev/null bs=2k
同时sar -d 1 10:
22:27:26 device %busy avque r+w/s blks/s avwait avserv
22:27:27 disk3 93.07 0.50 11328 45311 0.00 0.08
...
r+w/s的数值*2k (每个IO 2K大小) 基本上等于blk/s*0.5K (每块512字节) 的大小,证明完毕
如果一个硬盘设备的%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).
HPUX性能优化工具的使用 (3) --- iostat/vmstat/netstat/lanadmin/time/ps/kill/showmo
iostat - I/O Statistics Reporter
? Developed by Berkeley.
? Reports disk activity statistics.
? Compare to sar -d.
iostat是主要用来报告磁盘运行状态的工具,它的输出比sar –d可能更有用一些。
iostat给出CPU被IO占用的程度,还有发生在磁盘和终端上的IO的数量
iostat – Reporting Statistics
iostat每隔一个指定的时间间隔(interval)检查HPUX的内部计数器, 把结果输出到标准输出上。它会重复(count)次或是一直持续运行。如果interval没有给定,就只运行一次。第一行是从系统启动以来累计的结果,后续的行里是对应这个interval的结果。
对于每一个硬盘,iostat计算磁盘寻道与数据传输完成的数量和传输数据量的大小。每个硬盘的状态每秒钟检查HZ次(黄金甲按:原文如此,HZ是啥意思 捏?),如果硬盘是活跃的,就会有它的一个统计值。iostat计算每个设备的平均寻址时间。通过这些数据,可以揭示IO瓶颈还有不同硬盘之间负载是否均 衡。iostat报告每个硬盘而不是每个分区,所以swap区必须单独考虑。
如果指定-t参数,iostat会报告终端的输入输出字符数和全局的CPU活动。
利用硬盘的新技术如条带化,数据是分布在多个硬盘上的,平均寻址时间不太可能精确计算。所以,平均寻址时间(以毫秒为单位msps)被置为1.0
iostat – 示例
iostat 5 100 > iostat.out &
iostat -t 60 > iostat.out &
iostat l
i Reminder: The first report line summarizes system activity since the last reboot.
在第一个例子里,报告数据时间间隔5秒,重复100次,输出被重定向到一个文件在后台运行。
第二个例子中,终端、CPU和硬盘的活动每分钟进行一次,一直重复下去。输出被重定向到一个文件中,在后台运行。这个过程直到进程被kill掉才会停下来。
最后一个例子会将硬盘的状态显示出来,每秒一次,一直进行。
使用iostat时,选择合适的时间间隔很重要。通常选择5秒钟,因为有些统计信息每5秒采样一次。
注意:第一行是从系统启动以来的平均值,所以通常可以忽略。
iostat 5 4
device
bps
sps
msps
c0t6d0
3
0.3
1
c0t5d0
2
0.1
1
c0t4d0
0
0
1
c0t6d0
30
3.4
1
c0t5d0
0
0
1
c0t4d0
0
0
1
c0t6d0
2
0.6
1
c0t5d0
3
0.4
1
c0t4d0
0
0
1
c0t6d0
12
1.2
1
c0t5d0
26
3.4
1
c0t4d0
0
0
1
这个例子每5秒报告一次,重复4次。系统中有3个磁盘c0t6d0, c0t5d0, and c0t4d0。bps是每秒传输了多少K字节,sps是每秒寻址的次数,msps是寻址的平均时间。上例中前两块硬盘比第三块要忙一些。
注意,第一行是平均值,请忽略它。
vmstat –Virtual Memory Statistics Reporter
? Developed by Berkeley.
? Reports virtual memory, process and CPU statistics.
Other optional uses
vmstat报告一些关于虚拟内存、进程、陷阱和CPU活动的统计信息。也可选地报告硬盘的活动,系统启动后fork和vfork的数量,每种fork操作引入的虚拟内存页面数量等
vmstat报告的方式与iostat类似。每隔interval秒重复count次。第一条记录是启动后的平均值,后面的每行是对应这个时间间隔的数值。
如果没有选项,vmstat会报告各个状态的进程数(在运行队列中,受阻的,可运行的/短时间sleep但是被swapped),虚拟内存与实际内存的使用情况(活动的虚拟内存页和free list的大小),paging活动的5秒平均情况(page reclaim,地址翻译错误,page in/page out等),每秒的陷阱与中断数量(设备中断,系统调用,CPU上下文切换率)还有CPU在user/system/idle模式下的使用率。
通过-S参数,vmstat会显示swap in和out的进程数,而不是页面数。通过-f参数,显示系统启动后的fork与vfork数和它们占用的虚拟页面数。-d选项,报告数据传输量每秒。- s参数,显示paging活动相关的sum数据结构。-z选项,清空sum数据结构中的数据。只有超级用户才可以用-z选项。
vmstat示例
vmstat -d 5 100 > vmstat.out &
vmstat -S 60 > vmstat.out &
vmstat -fzs
vmstat l
vmstat
i Reminder: The first report line summarizes system activity since the last reboot.
第一个例子,硬盘信息以及进程、内存、系统调用、CPU信息每5秒一次,重复100次。输出重定向到一个文件,在后台运行。
第2个例子,显示swapping的信息。同样地,输出重定向在后台运行。这个命令只有在接到kill信号后才中止。
其他的命令显示了不同的选项,如果没有interval和count参数,只给出一行总和。
和用iostat一样,选择合适的时间间隔interval很重要。通常选5秒种。
#vmstat 5 5
procs
memory
page
cpu
r b w avm free re at pi po fr defacto sr in sy cs us sy id
2392 0 27578
0 0 0 0 0 0 54 0 0 31 14 4 1 95
712921 29583 7 0 49 23 169 87 0 196 76 443 973 9 64 28
20843 34441 7 0 20 50 93 117 0 196 30 342 583 16 60 24
106331 38295 6 0 22 21 22 23 0 196 71 383 1743 16 53 31
58 045 40831 7 0 20 53 39 44 0 167 54 235 1381 18 47 35
51 072 25362 943 65 94 18 0 0 0 0 54 694 7502 2 35 43
436928 32149 7 60 4 7 78 42 0 176 53 541 1118 23 57 20
本例显示了一个标准的vmstat输出,没有指定其他参数。最重要的数据是活动的虚拟内存(avm)和空余列表大小free list size(free)。如果有大量的avm和非常少的free,内存就存在瓶颈。然后vmstat就应该用-S参数来检查是否在发生swapping.
注意:只有很少的free内存,但是活动的虚拟内存页维持在比较高的水平,说明有内存瓶颈。这会伴随着swapping操作,也会有大量的上下文切换,会有大量的进程在运行队列中或是受阻于资源,即使有很多idle的CPU时间
从这个例子还能看到,vmstat和iostat都有一个问题就是大的数字的显示,相近的列挤到一起很难阅读。
提醒:第一行应该被忽略。
注意:使用-n选项,显示输出在80列显示的设备上更易阅读。这个格式把默认的输出分成两组:虚拟内存信息与CPU信息。 每一组单独一行显示。在多CPU系统中,也会按每个CPU单独显示利用率。
netstat Network Statistics Reporter
? Network statistics.
? Network bandwidth can affect performance as much as CPU, memory or I/O.
Not as much extraneous information as iostat and vmstat
netstat提供网络相关的统计信息。因为网络带宽与性能有很大关联,就像CPU、内存与IO一样,你要对网络的流量有个概念。
netstat不像iostat与vmstat那样提供很多无关的信息。相反地,它的大部分输出是有用的。
netstat提供上次重起之后累积的数据。你可以使用不同的选项,也可以指定报告的时间间隔。通常你需要忽略第一行,因为这是系统重起后的累积值,通常系统最忙时候的数据是最有用的。
netstat –i
Name Mtu Network Address
lan0 1497 151.150 a4410.e.h.c
Ipkts Ierrs Opkts Oerrs Col
242194 120 107665 23 19884
netstat –i显示自动配置的端口的状态。通常地,你想看lan0的信息,这个命令就有用。
Name: 网卡的名字,本例中是lan0
MTU: 最大传输单元Maximum transmission unit
Network: 配置的网络地址
Address:hostname,可以和/etc/hosts文件对照
Ipkts: 接收到的数据包的数量
Ierrs: 接收错误的数量
Opkts:发生的数据包数
Oerrs:发出过程中的错误
Col: 冲突Collisions的数量
netstat -I lan0 5
(lan0) -> input output
packets errs packets errs colls
269841735 27 256627585 1 5092223
1602 0 1238 0 49
1223 0 1048 0 25
1516 0 1151 0 42
(Total) -> input output
packets errs packets errs colls
281472199 27 268258048 1 5092223
1673 0 1309 0 49
1235 0 1060 0 25
1560 0 1195 0 42
这个例子每5分钟提供网卡的信息。 第一个输出应该被忽略。
你可以指定网卡 –I (例子里是lan0),例子里还指定了1时间间隔5秒。
分析netstat的输出是比较直观的。要确定冲突Colls明显少于输出的数据包(Opkts). 冲突在传输数据时发生,冲突会降低网络性能。每有一个绝对的公式说多高的冲突是可接受的。但是,如果冲突小于输出数据包Opkts的5%,通常地说情况不错,你可以把注意力放到其他资源上面。如果这个值高的话,你可能要考虑把网络进行segment。
一般说来,如果你输入与输出的数据包越小,你的网络负载与冲突就越少。可以考虑使用’私有’网卡专门用于主机间的连接,另一块网卡用来连接到大的网络中。
netstat –r
Routing tables
Destination Gateway Flags Refs Use Interface Pmtu
hp700 localhost UH 0 28 lo0 4608
default router1 UG 0 0 lan0 4608
128.185.61 system1 U 347 28668 lan0 1500
netstat -rn
Routing tables
Destination Gateway Flags Refs Use Interface Pmtu
hp700 127.0.0.1 UH 0 28 lo0 4608
default 128.185.61.1 UG 0 0 lan0 4608
128.185.61 128.185.61.2 U 347 28668 lan0 1500
还可以通过netstat获取路由相关的信息。-r选项显示路由表,-n选项用来显示网络地址而不是主机名。
-r选项显示了有关路由的信息,还有一个输出是Flags,它定义了路由的类型。下面是HPUX
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
里描述的通常的Flags.
1=U: 通过主机自身路由到一个网络。
3=UG: 通过另外一台主机路由到一个网络。
5=UH: 通过主机自身路由到另一台主机。
7=UGH:通过另外一台主机路由到一台主机。
第一行是主机本身或是名为lo0的环回接口(地址127.0.0.1).UH标志说明目标地址是本机。A类的地址可以使同一台主机上的服务器与客户端通过TCP/IP通信。
第二行是默认路由。这一条是说如果没有特别指定的路径,就把数据包送到router1. 这时标志位flag为UG. 有些路由器配置为U,另外一些就像本例中配为UG。 尝试一下可以确认应该用哪种。 比如说你看到标志位为U,但是ping不通,那改成UG通常就解决问题。
第三行是网卡lan0. 要使用这个网卡,数据包要发往128.185.61网段。
lanadmin
? Provides additional information related to network statistics.
? Menu-driven.
?
/usr/sbin/lanadmin 提供一些额外的网络信息。运行lanadmin时,出现一个菜单提示相关的选项,其中一个是显示网卡相关的信息。
lanadmin比netstat提供更多关于网卡的信息。网卡的类型,MTU,速度,运行状态还有网卡的硬件地址等。
lanadmin还提供更详细的报错信息。虽然任何类型的错误都会降低网络性能,对具体的错误与冲突了解多一些还是对解决问题有帮助。注意HPUX 11.0以后不再显示错误与冲突的信息。
通过lanadmin,你还可以使一块网卡复位,有时能在网络看起来不工作的情况下起作用,比如说网卡ping不通自己。
lanadmin菜单
LOCAL AREA NETWORK ADMINISTRATION
Test Selection mode.
lan = LAN Interface Administration