- 论坛徽章:
- 0
|
这是偶99年翻译的SUN的网络管理员(SA-387)的东东(6)
第十一章 性能监视
目标
完成本章的学习后,你将能够:
l 描述监视系统,网络和应用级别负荷的命令
l 计算网络带宽消耗的百分比
l 测试NFS客户/服务器的效率
介绍
本章描述的命令可以帮助你定位和查找网络,应用程序和系统级瓶颈的故障点。
监视服务器
——关于命令: /usr/bin/iostat
————磁盘负荷
命令:iostat 报告了终端和(更多有用的)磁盘的I/O活动。Iostat 用来测定一个服务器系统的磁盘负荷。
在下面的例子中,iostat 每5秒来测定一个磁盘的 I/O:
# iostat –D 5
输出的第一行总结了自系统第一次启动后,I/O的统计。随后的每行则表现了每隔一个具体的时间的活动。
以下的例子显示了一个磁盘负荷不平衡的服务器:
# iostat –D 5
sd0 sd1 sd2 sd3
rps wps util rps wps util rps wps util rps wps util
0 0 0.0 0 0 0.2 0 0 0.2 19 0 56.5
0 1 2.6 0 0 0.0 0 0 0.0 0 17 99.2
4 0 8.0 0 0 0.0 0 0 0.0 14 0 89.3
0 2 2.3 0 0 0.0 0 0 0.0 7 17 78.0
.
.
对比 sd0,sd1,sd2和sd3的util字段。注意,磁盘sd3被高负荷的使用着,并且读和写的I/O是混合的。其它磁盘 sd0,sd1,和sd2未被充分使用。
下面的这个例子是一个磁盘负荷比较平衡的服务器:
# iostat –D 5
sd0 sd1 sd2 sd3
rps wps util rps wps util rps wps util rps wps util
6 8 8.0 10 9 40.2 7 6 20.2 9 0 25.5
0 1 2.6 8 4 36.8 5 14 45.0 7 9 39.2
4 0 8.0 7 4 27.0 6 12 37.0 4 7 29.3
0 2 2.3 4 6 23.0 0 8 23.3 7 1 38.6
.
.
iostat 是一个有用的服务器配置命令。用来在每个磁盘上测量利用的程度和活动(读/写)的类型,管理员可以为服务器上的数据选择最佳位置来共享给使用NFS的客户端。
例如,当配置一个服务器来支持额外的客户时,可以iostat 来识别磁盘的可选用的级别。为了保持全部磁盘的负荷平衡,管理员可以使用 iostat 统计来为客户端的根区,交换区,和体系统结构区,以及终端用户的home目录分配空闲的位置。
——关于命令:/usr/bin/vmstat
命令:vmstat 报告关于进程,虚拟内存,磁盘,中断,及CPU活动的统计。
更为重要的是, vmstat 可以用来快速的发现CPU和内存的瓶颈,以下举个例子来说明 vmstat 的输出。
# vmstat 1
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s3 s6 in sy cs us sy id
1 0 5 516 0 0 1 0 0 0 0 0 0 0 9 60 48 4 2 94
0 0 3 75980 0 0 13 184 4 236 0 76 1 0 187 245 127 6 14 80
1 0 4 75984 0 0 0 96 0 40 0 60 0 0 148 152 100 7 5 88
0 0 2 75984 0 0 0 120 0 176 0 53 0 0 131 84 86 6 5 89
————执行队列
在字段 procs 下的列描述了在可执行队列中的进程号。字段 r 表示进程已经装入内存中。下一个字段 b 描述了不能被执行的进程号,因为这些进程要等待磁盘,终端或网络的I/O操作来完成。在字段 w 中所表示的是进程已经被交换出去。
————虚拟内存
字段 sr 指出了每秒中页守护进程的循环次数。这个进程只在有效的内存很少的情况下才运行。如果每秒的连续值大于20,则说明内存已经不足。
————CPU的利用率
字段cpu所在的列描述了基于用户和系统调用的CPU的利用率。连续的低值在cpu的id字段(值低于10)说明CPU非常忙。
许多可猎取的进程被交换出去(如在procs字段中所指明的那样),内存中的少量的可猎取进程指出了物理内存的缺点。
在例子中,虚拟内存的大负荷使用,磁盘的I/O可能会是系统的瓶颈。
# vmstat 1
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s3 s6 in sy cs us sy id
1 0 5 516 0 0 1 0 0 0 0 0 0 0 9 60 48 4 2 94
0 0 3 75980 0 0 13 184 4 236 0 76 1 0 187 245 127 6 14 80
1 0 4 75984 0 0 0 96 0 40 0 60 0 0 148 152 100 7 5 88
0 0 2 75984 0 0 0 120 0 176 0 53 0 0 131 84 86 6 5 89
——关于命令:/usr/sbin/sar
命令:sar 是系统活动的指示器。Sar 可以交互式的或用批处理方式来报告系统资源的利用率。
————交互式的报告
以下这个交互式的例子测试了CPU的利用率并且每隔10秒取得一个样本,共两个。
# sar 10 2
SunOS bear 5.5 Generic sun4m 01/20/96
01:53:14 %usr %sys %wio %idle
01:53:24 0 0 0 100
01:53:34 0 1 2 97
Average 0 1 99
#
————批处理方式报告
如果指定 –o ,那么样本将会保存在一个二进制格式的文件中。
# sar –o /tmp/sar.file 10 2
#
文件中收集的信息也许可以用选项 –f 来重新进行。
# sar –f /tmp/sar.file
SunOS bear 5.5 Generic sun4m 01/20/96
01:53:14 %usr %sys %wio %idle
01:53:24 0 0 0 100
01:53:34 0 1 2 97
Average 0 1 99
#
下面使用 sar 的选项来帮助你发现关键性系统资源的利用率。
————磁盘利用率
使用 –d 选项来发现不平衡的磁盘负荷。注意在下面的例子中,字段 %busy 中的磁盘 sd3 比所有其它的设备都要忙。
# sar –d 10 2
SunOS bear 5.5 Generic sun4m 01/20/96
02:03:05 device %busy evque r+w/s biks/s avwait avsery
02:03:15 fd0 0 0.0 0 0 0.0 0.0
sd2 0 0.0 0 0 0.0 0.0
sd3 67 0.7 9 2206 0.0 75.5
02:03:25 fd0 0 0.0 0 0 0.0 0.0
sd2 2 0.2 1 22 88.5 46.1
sd3 69 0.7 9 2182 0.0 79.7
Average fd0 0 0.0 0 0 0.0 0.0
Sd2 1 0.1 1 11 88.5 46.1
Sd3 68 0.7 9 2194 0.0 77.6
#
————虚拟内存
使用选项 –g 来监视虚拟内存的使用。字段 pgscan /s 指出了由守护进程 pageout执行的每秒搜索的页面数。这个守护进程只运行在有效内存很低的情况下。连续的值大于20每秒说明内存已经不足。
# sar –g 10 2
SunOS bear 5.5 Generic sun4m 01/20/96
02:22:34 pgout /s ppgout /s pgfree /s pgscan /s %ufs_ipf
02:22:44 1.20 12.08 21.06 23.85 7.06
02:22:54 1.10 9.00 19.30 21.30 10.81
Average 1.15 10.54 20.18 22.58 7.35
#
————执行队列
使用 –q 选项来查找执行队列中有多少进程在排队。字段 runq-sz 中指出了内存中等待执行的进程线数。如果值始终大于2,那么系统限制于CPU。
字段 %runocc 表示运行队列是否被占用。较小的值是比较可取的,因为它表明每个队列中的进程都被较好的分配了时间。
# sar –q 10 2
SunOS bear 5.5 Generic sun4m 01/20/96
02:35:31 runq-sz %runocc swpq-sz %swpocc
02:35:41 12.6 100 0
02:35:51 12.0 100 0
Average 12.3 100 0
#
————自由内存
使用 –r 选项来查找可用内存页和交换文件磁盘块的平均数量。
Freemem 字段指出了每个间隔中能为用户进程有效使用的内存(在 SPARC结构中为4K)页的平均数量。
Freeswap 字段显示了有多少个512字节的扇区是可以为交换使用的。
Freemem 的连续低值(少于安装内存的6%)则表示有效的内存不够,和一个可能的瓶颈。
# sar –r 10 2
SunOS bear 5.5 Generic sun4m 01/20/96
02:55:11 freemem freeswap
02:55:22 2686 178006
02:55:32 2208 160269
Average 2447 169151
#
——命令:/usr/sbin/swap
命令:swap 用来显示使用的交换空间,和在磁盘上增加和移动交换区。
————显示交换空间
下面这个例子使用选项 –l 在每个交换设备上显示全部的磁盘扇区(块)列表和未使用的扇区(自由)。
# swap –l
swapfile dev swaplo blocks free
/dev/dsk/e0t3d0s1 32,25 8 187912 127088
#
默认的交换区是第二个磁盘设备分区包括根分区,就象在例子中显示的那样。
——创建和增加交换区
附加的交换分区可以是规则文件(由命令 mkfile 创建)也可以是磁盘分区。下面的例子用命令: mkfile 来创建一个10M的交换分区。
# mkfile 10m /exp/swap
#
附加的交换空间也可以使用命令:swap 的选项 –a 。下面的例子增加一个交换文件,然后更新交换空间列表。
# swap –a /exp/swap
# swap –l
swapfile dev swaplo blocks free
/dev/dsk/c0t3d0s1 32,25 8 187912 126920
/exp/swap 8 20472 20472
#
————移除交换区
使用选项 –d 来移除交换区。在这个例子中,先前增加的交换区被移除,并核实调整之后的交换空间。
# swap –d /exp/swap
# swap –l
swapfile dev swaplo blocks free
/dev/dsk/c-t3d0s1 32,25 8 187912 126920
#
如果交换区有任何活动的磁盘扇区包含交换到进程中的数据,命令: swap 在移除交换区前会安全的对数据进行重新定位。
——命令:/usr/bin/ps
命令:ps 打印所有活动进程的信息。更重要的是,ps 命令可以查找进程的ID号(PID),(可用来向进程发送终止或挂起的信号),进程状态(进程是否已经被装入内存等待执行,交换到磁盘等等),累计的CPU资源消耗(通常用来捕获失控的进程)。
下面举例说明 ps 的输出:
# ps –el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CO
8 R 7198 22028 19551 80 1 30 ff7c0000 349 ? 83:53 xl
19 S 0 3 0 80 0 SY ff19d000 0 f00c26ae ? 265:00 fsfl
8 O 0 26070 26053 14 1 20 ff78c000 142 pts/4 0:00 p
字段S来描述每个进程的状态(从剩余的秒来说)。下面对每个可能出现的进程状态做一个描述。
————进程状态
l O 进程正在被处理器运行
l S 睡眠状态:进程正在等待一个事件来完成
l R 可捕获的:进程正在运行队列中
l I 空闲的:进程正准备创建
l Z 僵尸进程:进程终止,父进程不必等待
l T 追踪:进程被一个信号停止,因为父进程正在追踪于它
l X SXBRK 状态:进程正在等待更多的主内存
——命令:/usr/bin/netstat
命令:netstat 显示了多种网络关系信息,包括每个网络接口的传输统计。
————冲突比率
在下面的例子中使用 10秒的间隔来测试包冲突的比率。
# netstat –i 10
input le0 output input (Total) output
packets errs packets errs colls packets errs packets errs colls
1929138 0 1590861 3 73176 1946182 0 1607905 3 73176
16 0 1 0 0 16 0 1 0 0
3 0 3 0 0 3 0 3 0 0
一个单一主机的冲突比率是输出冲突的数量除以总共的输出包的量。网络冲突比率按如下的方式计算:
l 在所有活动主机上运行这个命令来收集网络的统计量,用总共的冲突数除以总共的输出包数就可以得出网络的冲突比率。
l 冲突的比率被定义为:输出的冲突数除以总共的输出包,再乘以100。拿上个例子来说:
73176 / 1590861 * 100=4.6% 的冲突比率。
冲突比率超过5%,则要先考虑网络的负荷是否过重。
冲突比率超过10%,这是一个超负荷的网络,要考虑把它分段。
——命令:/usr/sbin/snoop
命令: snoop 在网络上捕获和显示包的内容。Snoop 可以用来定位许多网络异常的源和目标如NFS的重发。
这个命令的输出可以用它所捕获的大量数据快速的淹没磁盘的可用空间。超负荷的有用信息包括如下:
l 捕获一个二进制文件
# snoop –o packet.file
# CTRL-c
显示这个二进制文件的内容
# snoop –i packet.file
l 只捕获有关的信息如包含在前120个字节内的包的头文件
# snoop –s 120
l 捕获指定的包的数量
# snoop –c 1000
l 捕获 tmpfs 来避免因磁盘瓶颈撤消的包信息
# snoop –o /tmp/packet.file
l 指定过滤器来捕获指定类型网络活动
# snoop broadcast
l 使用 awk ,sed ,grep ,来解释和总结 snoop 输出。
——命令:/usr/bin/nfsstat
命令:nfsstat 显示了关于NFS和RPC的内核接口的统计信息。
NFS对决定NFS的客户/服务器的一个时期内的工作负荷也是很有用的。字段 calls 显示了NFS的操作数量,也就是服务器提供的服务或客户端的请求。
# nfsstat –rc
Client rpc:
Calls badcalls retrans badxid timeout wait newcred timers
186992 7 225 170 166 0 0 370
.
#
字段 badxid 显示了客户端接收了多少次关于一个单一请求的肯定应答。
字段 retrans 指明了在一个时间周期内,客户端因没有接收到一个肯定的应答而重新发送请求的次数。
————评价NFS的客户/服务器统计
如果 badxid 和 retrans 值都关闭的话,那么,服务器对客户端的响应则不够快速。优化服务器的性能也就相应提高了网络的性能。
客户端可查觉到的性能可以通过增加客户的文件系统表或映射的time-out(timeo)选项值来提高。默认值为11(1.1秒)。网络的响应时间不会提高,但客户会体验到更少的timeout,重新发送,和并发的错误信息。
如果 badxid的值比retrans的值小得许多或为0,那么,混合了NFS,RCP的信息没有到达服务器,网络或服务器上的网卡是可疑的。
如果重新发送的与全部的调用的比率大于5%(retans/calls *100),重传率就过高。这可能表示客户端正在存取一个不同子网或网段的服务器。如果客户端的数据报在它们到达目标服务器之前导致了过多的重传,那么它们有可能会被中间的路由或桥取消。
为了更好的适应中间结点的数据报大小的处理能力,NFS的传输信息大小可以减少。读和写的大小可以通过 nfsstat 加选项 –m 来测定。
# nfsstat –m
/mnt/opt from zebra:/opt
Flags:vers=3,proto=udp,auth=unix,hard,intr,link,sylink,acl,
rsize=32768,waize=32768,retrans=5
Lookups: srtt=7 (17ms), dev=3 (15ms), cur=2 (40ms)
Reads: srtt=1 (2ms), dev=1 (5ms), cur=0 (0ms)
All: srtt=7 (17ms), dev=3 (15ms), cur=2 (40ms)
注意:如果使用NFS版本3,那么TCP协议将会自动的降低段大小一直到它适合通过”bad routers”。这是在路由器不支持 back-to-back的IP碎片时发行的,这些碎片是由NFS版本2的8k字节的读和写产生的。但,只有在客户端使用UDP时,rsize/wsize会被设小来适应一个MTU,如512或1k字节。
——重新初始化统计
在命令:nfsstat 中使用选项 -z 来重新初始化统计报告。在下面的例子中,客户的RPC统计被设置为0。
# nfsstat –rcz
Client rpc:
Calls badcalls retrans badxid timeout wait newcred timers
5815 0 0 0 0 0 0 39
#
——守护进程 /usr/lib/nfs/nfsd
在Solaris 2.x操作系统中,nfsd 是一个使用内核线程来处理所有的NFS请求的单一进程。如果服务器上没有足够的可用线程来服务每个客户端的请求,客户端性能也是可以忍受的。
你可以配置两个线程为每个活动的客户端机器,或32个每以太网络。默认为16个线程给每个偶然的NFS用户。但是,如果一个低终端SPARC类的服务器同时运行几百个线程还是有些负荷过重的。
调整系统启动时的nfsds数在脚本:/etc/rc3.d/S15nfs.server或 /etc/init.d/nfs.server
——总结
在本章中,你已经学会:
l 描述用来监视系统,网络和应用级别负荷的命令
l 决定消耗网络带宽的比率
l 测试NFS客户/服务器的效率 |
|