AIX网络性能分析.docx
《AIX网络性能分析.docx》由会员分享,可在线阅读,更多相关《AIX网络性能分析.docx(53页珍藏版)》请在冰豆网上搜索。
AIX网络性能分析
出现性能问题的时候,您的系统可能一点过失也没有,而真正的故障原因却是外面的建筑物。
如果要知道是否是网络影响总体的性能,一个简单的方法就是比较涉及网络的操作和那些和网络无关的操作。
如果您正在运行的程序在进行相当距离的远程读取和写入,而且运行很慢,但其他的操作看起来运行正常,这时可能是网络问题造成的。
如果您正在运行的程序在进行相当距离的远程读取和写入,而且运行很慢,但其他的操作看起来运行正常,这时可能是网络问题造成的。
一些潜在的网络瓶颈可能由以下因素造成:
*客户端网络接口s
*网络带宽
*网络拓扑结构
*服务器端网络接口
*服务器端CPU负载
*服务器存储器使用状况
*服务器带宽
*配置效率低下
一些工具能够进行网络资料统计,给出各种各样的信息,但只有其中的一部分是和性能调谐相关的。
为了改善性能,您可以使用no(网络选项)命令和nfso命令来对NFS选项进行调谐。
您还可以使用chdev和ifconfig命令来改变系统和网络的参数值。
ping命令
在下面这些情况下ping命令是有帮助的:
*确定网络的状态和各种外部主机。
*跟踪并隔离硬件和软件故障。
*对网络的检测、测定和管理。
下面列出的是一些和性能调谐相关联的ping命令参数项:
-c
指定了信息包数。
如果您有IP跟踪记录,这个参数项是有用的。
您可以捕捉到ping信息包的最小值。
-s
指定信息包的长度。
您可以使用这个参数项来检查分段和重新组合。
-f
以10ms的间歇发送信息包或是在每次回应之后立即发送。
只有根用户才可以使用这个参数项。
如果您需要加载您的网络或系统,使用-f参数项就很方便。
比如,如果您猜测您的故障是过量负载造成的,可以试着有意加载您的工作区来证实您的怀疑。
打开一些aixterm窗口,并在每个窗口中运行ping-f命令。
您的以太网使用状况很快就会达到接近100%。
下面是一个例子:
#date;ping-c1000-fwave;date
FriJul2311:
52:
39CDT1999
PING:
(9.53.153.120):
56databytes
.
----PINGStatistics----
1000packetstransmitted,1000packetsreceived,0%packetloss
round-tripmin/avg/max=1/1/23ms
FriJul2311:
52:
42CDT1999
注:
这个命令在网络上运行可能很困难,要小心使用。
连续地执行ping命令只能由根用户来操作。
在这个例子中,1000个信息包发送了3秒。
要知道这个命令使用了IP和网络控制信息协议(ICMP),因而没有涉及到任何传输协议(UDP/TCP)和应用程序。
测到的数据,比如往返的时间,不会影响到总体的性能特征。
如果您试图发送大量的信息包到您的目的地址,就要考虑如下几点:
*发送信息包对您的系统来说,增加了负载。
*使用netstat-i命令可以在试验过程中监测您的网络接口的状态。
通过查看Oerrs的输出您可以发现系统在发送中在删除信息包。
*您也应该监控其他资源,比如mbuf和发送/接收队列。
很难在目标系统上增加一个大的负载。
或许在其他系统过载之前您的系统就过载了。
*考虑结果的相关性。
如果您想监控或测试的仅是一个目标系统,就在其他的一些系统上做同样的试验来进行比较,因为或许您的网络或是路由器出现了故障。
ftp命令
您可以使用ftp命令来发送一个非常大的文件,使用/dev/zero作为输入,/dev/null作为输出。
这样您就可以传输一个大文件,而不用考虑磁盘(可能是瓶颈问题),也不需要在内存中高速缓存整个文件。
使用下面的ftp子命令(改变count的值可以增加或是减少块的数量,块的数量可以通过dd命令读出):
>bin
>put"|ddif=/dev/zerobs=32kcount=10000"/dev/null
记住,如果您改变了TCP的发送或接收空间参数,对于ftp命令,您必须刷新inetd守护程序,使用refresh-sinetd命令就可以刷新。
要确保tcp_senspace和tcp_recvspace的值至少为65535(对于Gigabit以太网"jumboframes"和带有MTU9180的ATM来说),如果要获得更好的性能就需要更大的值,这是因为MTU的值也增加了。
下面举的是一个设置参数的例子:
#no-otcp_sendspace=65535
#no-otcp_recvspace=65535
#refresh-sinetd
#refresh-sinetd
0513-095刷新子系统的请求成功完成。
下面列出的是ftp子命令:
ftp>bin
200TypesettoI.
ftp>put"|ddif=/dev/zerobs=32kcount=10000"/dev/null
200PORTcommandsuccessful.
150Openingdataconnectionfor/dev/null.
10000+0recordsin
10000+0recordsout
226Transfercomplete.
327680000bytessentin8.932seconds(3.583e+04Kbytes/s)
local:
|ddif=/dev/zerobs=32kcount=10000remote:
/dev/null
ftp>quit
221Goodbye.
网络统计命令
netstat命令可以用来显示网络的状态。
按惯例来看,它是用来做故障识别而不是作为性能评定用的。
然而,netstat命令可以用来确定网络上的流量,从而可以确定性能故障是否是由于网络阻塞所引起。
netstat命令显示的是关于在配置的网络接口上的流量,如下面所示:
*和套接字有关的任何一个协议控制块的地址及所有套接字的状态
*收到、发送出去和在通信子系统中丢失的信息包数量
*每个接口的累计统计信息
*路由和它们的状态
使用netstat命令
netstat命令显示的是有效连接的各种网络相关的数据结构内容。
本章中只讨论和网络性能决定性相关的参数项和输出域。
对于其他所有的参数项和栏目,请参阅《AIX5LV5.2命令参考大全》。
netstat-i
显示的是所有配置接口的状态。
下面的例子显示的是一个带有集成以太网和Token-Ring适配器的工作站的统计信息:
#netstat-i
NameMtuNetworkAddressIpktsIerrsOpktsOerrsColl
lo016896144834014494600
lo016896127localhost144834014494600
tr0149210.0.5a.4f.3f.61658339024735500
tr014929.3.1ah6000d658339024735500
en015008.0.5a.d.a2.d50011200
en015001.2.31.2.3.40011200
count的值从系统启动开始进行汇总。
Name
接口名称。
Mtu
最大传输单元。
使用接口时可以传输的最大信息包大小,以字节为单位。
Ipkts
接收到信息包的总数量。
Ierrs
输入错误的总次数。
比如,畸形的信息包、校验和错误或是设备驱动程序中的缓冲空间不足。
Opkts
发送信息包的总数量。
Oerrs
输出错误的总数。
比如,主机连接的错误或是适配器输出队列超限。
Coll
检测到的信息包冲突的次数。
注:
netstat-i命令并不和以太网接口下的冲突次数相匹配(请参阅以太网统计资料的netstat命令)。
下面时一些调谐的准则:
*如果输入信息包中的错误次数比输出信息包总数的1%还要大(从netstat-i)命令可以看出,即是说,
Ierrs>0.01xIpkts
那么就运行netstat-m命令来检查存储器的不足。
*如果输出信息包中的错误次数比输出信息包总数的1%还要大(从netstat-i)命令可以看出,即是说,
Oerrs>0.01xOpkts
那么就为这个接口增加发送队列的大小(xmt_que_size)。
xmt_que_size的大小可以通过下面的命令来检查:
#lsattr-Eladapter
*如果冲突的比率比10%要大,即是,
Coll/Opkts>0.1
那么网络的使用率就比较高,这时或许就有必要重新组合或是分区。
使用netstat-v或者entstat命令可以确定冲突的比率。
netstat-i-Z
netstat命令对所有netstat-i命令的计数器进行清零。
netstat-Iinterfaceinterval
显示指定接口的统计信息。
对于一个指定的接口,它提供的信息和netstat-i命令类似,并按给定的时间间隔通报。
举例来说:
#netstat-Ien01
input(en0)outputinput(Total)output
packetserrspacketserrscollspacketserrspacketserrscolls
002700799655039066900
0000020000
0000010000
0000078025400
0000020006200
0010000200
上面的例子显示的是netstat-I命令的输出(对于ent0接口来说)。
依次生成了两个报告,一个是对指定接口,一个是对所有可用的接口(Total)。
这些域和netstat-i例子中的很相似,inputpackets=Ipkts,inputerrs=Ierrs,等等。
netstat-m
显示mbuf存储器管理程序所记录的统计信息。
在netstat-m命令的输出中最有用的统计信息就是显示被拒绝的mbuf请求的计数器和故障一列中的非零值。
如果没有显示被拒绝的mbuf请求,那么可以肯定SMP系统在运行4.3.2版本或是更晚版本的操作系统,为了性能方面的原因,缺省设定为关闭全局的统计信息。
要启用全局的统计信息,需要把no参数extended_netstats设定为1。
需要更改/etc/文件然后重启系统,就可以实现设定。
下面的例子显示的是netstat-m输出的第一部分,这是extended_netstats设定为1之后的情况:
#netstat-m
29mbufsinuse:
16mbufclusterpagesinuse
71Kbytesallocatedtombufs
0requestsformbufsdenied
0callstoprotocoldrainroutines
内核分配统计信息:
*******CPU0*******
Bysizeinusecallsfaileddelayedfreehiwatfreed
32419544702002218000
641732242400194000
12812137130001352004
256120111832623300239480138
51233067152400145054
10247492980600821252
204838418208840081255605
40965161158445004615021
8192956340011227
163841295300243041
327681100010230
Bytypeinusecallsfaileddelayedmemusememmaxmapb
Streamsmblkstatisticfailures:
0highprioritymblkfailures
0mediumprioritymblkfailures
0lowprioritymblkfailures
如果全局的统计信息没有处于打开状态,而您想确定被拒绝的mbuf请求的总数就可以每个CPU下面的failed列中的值相叠加。
如果netstat-m命令表明,向mbuf或群集器的请求失败或是被拒绝,这时您或许想增加thewall的值,这可以通过no-othewall=NewValue命令来实现。
要了解细节内容,请参阅『mbuf管理工具』,那里提到了有关thewall和maxmbuf的使用。
AIX4.3.3之后,就增加了delayed这个列。
如果对mbuf的请求指定了M_WAIT标记,那么如果没有可用的mbuf时,线程就会进入睡眠状态,直到有mbuf被释放,能够为这个线程所用。
这种情况下失效的计数器不会执行增一操作,但delayed列会执行增一操作。
在AIX4.3.3之前,失效的计数器也不能够进行增一,但那时没有delayed这一列。
而且,如果当前分配的网络存储器的大小是thewall的85%的范围内,您或许想要增加thewall的值。
如果thewall的值增加,就可以使用vmstat命令来监控存储器使用的总量,从而可以确定这个增加对总体的存储器性能是否具有负面影响。
如果接收到一个请求时没有可用的缓冲区,那么这个请求很可能会被删除(如果要查看适配器是否真的删除了包,请参阅『适配器统计信息』)。
记住一点,如果mbuf的请求方指定,在没有mbuf可以立即使用的情况下,它可以等待mbuf空闲。
这样就会使得请求方进入睡眠状态,但不会作为被拒绝的请求进行计数。
如果失效请求的数量持续增加,可能是因为系统出现了mbuf泄漏。
为了有助于跟踪故障,可以把no命令参数net_malloc_police设置为1,在使用trace命令时可以使用标识为254的跟踪hook。
分配一个mbuf或是群集器并锁定后,它可以被应用程序所释放。
并不是解除这个缓冲区的锁定,把它归还给系统,而是把它置放在一个基于缓冲区大小的自由列表中。
下一次再收到请求缓冲区时,就会把它从自由列表中去除,这样就避免了锁定的动作开销。
下一次再收到请求缓冲区时,就会把它从自由列表中去除,这样就避免了锁定的动作开销。
当自由列表的缓冲区总量达到了高限值之后,大小低于4096的缓冲区就会进行合并,组成页面大小的单元,这样就可以解除它们的锁定并归还给系统。
缓冲区归还给系统时,freed列就会进行增一操作。
如果freed的值持续增大,那么上限值就太低。
在AIX4.3.2和后来的系统中,高限值可以根据系统中的RAM数量进行比例缩放。
netstat-v
netstat-v命令显示的是正在运行的每一个基于通用数据链接接口设备驱动程序的统计信息。
至于特定于接口的报告,可以使用tokstat、entstat、fddistat或者是atmstat命令。
每个接口都有它自身的特定信息和一些通用信息。
下面的例子显示的是netstat-v命令的Token-Ring和以太网部分,其他的接口部分也是类似的。
对于不同的适配器而言,统计量会有所不同。
最重要的输出字段采用高亮显示。
#netstat-v
-------------------------------------------------------------
ETHERNETSTATISTICS(ent0):
DeviceType:
IBM10/100MbpsEthernetPCIAdapter(23100020)
HardwareAddress:
00:
60:
94:
e9:
29:
18
ElapsedTime:
9days19hours5minutes51seconds
TransmitStatistics:
ReceiveStatistics:
---------------------------------------
Packets:
0Packets:
0
Bytes:
0Bytes:
0
Interrupts:
0Interrupts:
0
TransmitErrors:
0ReceiveErrors:
0
PacketsDropped:
0PacketsDropped:
0
BadPackets:
0
MaxPacketsonS/WTransmitQueue:
0
S/WTransmitQueueOverflow:
0
CurrentS/W+H/WTransmitQueueLength:
0
BroadcastPackets:
0BroadcastPackets:
0
MulticastPackets:
0MulticastPackets:
0
NoCarrierSense:
0CRCErrors:
0
DMAUnderrun:
0DMAOverrun:
0
LostCTSErrors:
0AlignmentErrors:
0
MaxCollisionErrors:
0NoResourceErrors:
0
LateCollisionErrors:
0ReceiveCollisionErrors:
0
Deferred:
0PacketTooShortErrors:
0
SQETest:
0PacketTooLongErrors:
0
TimeoutErrors:
0PacketsDiscardedbyAdapter:
0
SingleCollisionCount:
0ReceiverStartCount:
0
MultipleCollisionCount:
0
CurrentHWTransmitQueueLength:
0
GeneralStatistics:
-------------------
NombufErrors:
0
AdapterResetCount:
0
DriverFlags:
UpBroadcastRunning
Simplex64BitSupportPrivateSegment
IBM10/100MbpsEthernetPCIAdapterSpecificStatistics:
------------------------------------------------
ChipVersion:
25
RJ45PortLinkStatus:
down
MediaSpeedSelected:
10MbpsHalfDuplex
MediaSpeedRunning:
Unknown
ReceivePoolBufferSize:
384
FreeReceivePoolBuffers:
128
NoReceivePoolBufferErrors:
0
InterPacketGap:
96
AdapterRestartsduetoIOCTLcommands:
0
PacketswithTransmitcollisions:
1collisions:
06collisions:
011collisions:
0
2collisions:
07collisions:
012collisions:
0
3collisions:
08collisions:
013collisions:
0
4collisions:
09collisions:
014collisions:
0
5collisions:
010collisions:
015collisions:
0
Excessivedeferralerrors:
0x0
-------------------------------------------------------------
TOKEN-RINGSTATISTICS(tok0):
DeviceType:
IBMPCITokenringAdapter(14103e00)
HardwareAddress:
00:
20:
35:
7a:
12:
8a
ElapsedTime:
29days18hours3minutes47seconds
TransmitStatistics:
ReceiveStatistics:
---------------------------------------
Packets:
1355364Packets:
55782254
Bytes:
791555422Bytes:
6679991641
Interrupts:
902315Interrupts:
55782192
TransmitErrors:
0ReceiveErrors:
1
PacketsDropped:
0PacketsDropped:
0
BadPackets:
0
MaxPacketsonS/WTransmitQueue:
182
S/WTransmitQueueOverflow:
42
CurrentS/W+H/WTransmitQueueLength:
0
BroadcastPackets:
18878BroadcastPackets:
54615793
MulticastPackets:
0MulticastPackets:
569
TimeoutErrors:
0ReceiveCongestionErrors:
0
CurrentSWTransmitQueueLength:
0
CurrentHWTransmitQueueLength:
0
GeneralStatistics:
-------