首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

UNIX 网络性能分析

UNIX 网络性能分析

了解UNIX?网络布局会帮助您了解自己的网络及其运行方式。但是,当UNIX网络性能和传输文件或连接服务的速度突然下降时,究竟发生了什么?如何诊断网络问题并找到网络中出现问题的地方?本文介绍一些快速发现和识别性能问题的方法以及解决问题的步骤。
简介
网络的性能对于环境其余部分的性能和可靠性影响很大。如果应用程序和服务等待通过网络传输的数据,或者客户机无法连接它们或接收信息,就需要解决这些问题。
性能问题还会影响应用程序和环境的可靠性。性能问题可能由网络故障导致,在某些情况下性能问题甚至是网络故障的原因。要想了解和诊断网络问题,首先需要了解问题的性质;问题往往与延时或带宽相关。
在一般情况下,网络性能问题常常与底层硬件有关;无法突破网络环境的物理限制。所有性能问题还常常与某种协议或系统相关,比如NFS或Web访问。但是,可以在操作系统中诊断和识别问题,决定正确的纠正措施。
本文讨论识别性能问题涉及的几个步骤:
确定基线性能水平
判断发生问题的位置
获得统计数据
识别瓶颈
了解网络指标
要想了解和诊断性能问题,首先需要确定基线性能水平。首先介绍在判断基线性能时使用的两个重要概念:网络延时和网络带宽。
网络延时
网络延时是向目的地发送请求到目的地实际接收到数据包之间的时间间隔。作为网络性能指标,延时增加说明网络繁忙,这意味着要传输的数据包数量超过了传输能力,数据的发送者在传输或重新传输之前必须等待。
当网络的复杂性以及数据包要经过的主机或网关数量增加时,也会增加网络延时。点之间的线缆长度也会影响延时。对于长距离线路,传统的铜线总是比光纤连接慢。
网络延时与应用程序延时不同。网络延时只与通过网络传输数据包相关,而应用程序延时是指应用程序接收请求到它做出响应之间的时间间隔。
网络带宽
带宽表示在特定的一段时间内可以通过网络传输的数据包数量。带宽影响可以传输的数据量,它把向一个主机传输数据的速度限制为网络连接支持的最大速度,在使用多个并发连接时限制总传输速度。
从理论上说,网络带宽应该不会变,除非改变网络接口和硬件。影响网络带宽的主要因素是在给定时刻使用网络的主机数量。
例如,1GB的以太网接口可以向另一个网络主机传输1GB数据,或向10个主机同时传输100MB,或向100个主机同时传输10MB。当然,实际上常常不需要稳定的带宽。在一段时间内会有来自大量主机的许多小请求,服务器的可用带宽看起来可以比客户机带宽的总和大得多。
获得统计数据
在判断网络中是否发生问题之前,需要先确定基线性能,然后据此做出假设。为此,必须通过检查各种网络参数(与网络应用程序环境相关的延时、性能和测试)判断性能,然后监视和对比性能随时间的变化。
应该在可控制的状况下执行基线网络测试。在理想情况下,应该在隔离(没有其他网络通信流)和有典型的网络通信流两种场景中执行测试,这会提供两个基线:
对于隔离监视,应该在网络上没有其他通信流的情况下,检查服务器与一个或多个客户机之间的性能。这意味着要么关闭其他服务,要么把服务器和客户机放在一个隔离的网络环境中,这个环境与标准网络环境完全隔离(但是完全相同)。
对于标准监视,应该把客户机和服务器连接到标准网络,网络上有正常的背景通信流,但是除了要测试的服务器之外,禁用所有与应用程序相关的通信流(比如电子邮件、文件服务、Web服务)。
对于实际测试过程,可以使用许多标准工具和测试判断基线值。
测量延时
所有网络管理员都很熟悉ping工具,使用它作为检查网络设备的可用性和延时的基本工具。在大多数机器上都可以使用ping,包括客户机和服务器,只要它们已经配置为对ping工具发送给设备的ICMP数据包做出响应。简单地说,ping向设备发送一个echo数据包,期望设备把数据包的内容发送回来。
在这个过程中,ping可以监视发送数据包和接收响应花费的时间,这是测量echo过程的响应时间的有效方法。按照最简单的形式,可以向一个主机发送echo请求并查明响应时间(见清单1)。
清单1。使用ping判断延时
$pingexample
PINGexample。example。pri(192。168。0。2):56databytes
64bytesfrom192。168。0。2:icmp_seq=0ttl=64time=0。169ms
64bytesfrom192。168。0。2:icmp_seq=1ttl=64time=0。167ms
^C
---example。example。pripingstatistics---
2packetstransmitted,2packetsreceived,0%packetloss
round-tripmin/avg/max/stddev=0。167/0。168/0。169/0。001ms
需要使用Control-C停止ping过程。在Solaris和AIX?上,需要使用-s选项发送多个echo数据包并获得计时信息。为了获得基线数据,可以使用-c选项(在Linux?上)指定数量。在Solaris/AIX上,可以指定数据包大小(默认大小为56字节)和要发送的数据包数量,这样就不必手工终止ping过程。然后可以自动地获得计时信息(见清单2)。
清单2。在Solaris/AIX上使用ping时指定数据包大小
$ping-sexample5610
PINGexample:56databytes
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=0。time=0。143ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=1。time=0。163ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=2。time=0。146ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=3。time=0。134ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=4。time=0。151ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=5。time=0。107ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=6。time=0。142ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=7。time=0。136ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=8。time=0。143ms
64bytesfromexample。example。pri(192。168。0。2):icmp_seq=9。time=0。103ms
----examplePINGStatistics----
10packetstransmitted,10packetsreceived,0%packetloss
round-trip(ms)min/avg/max/stddev=0。103/0。137/0。163/0。019
清单2中的示例是在网络比较空闲的时候得到的结果。如果在测试期间检查的主机(或网络本身)比较忙,那么ping时间会显著增加。只使用ping不足以表明是否有问题,但是有时候ping可以快速地查明是否有问题需要进一步诊断。
对ping的支持可能会禁用,所以在使用ping检查主机是否可用之前应该确认能够访问此主机。
理想情况下,应该在一段时间内连续地跟踪特定主机之间的ping时间,这样就可以得到平均响应时间,然后识别要检查的位置。
使用sprayd
sprayd守护进程和相关联的spray工具向指定的主机发送一个大的数据包流,判断这些数据包中有多少得到了响应。它是一种测量网络性能的方法,不应该把它当作性能指标,因为它使用无连接的传输机制。根据定义,使用无连接传输机制发送的数据包并不保证能够到达目的地,在通信中允许丢失数据包。
使用spray可以查明网络上是否有很多通信流,因为如果无连接传输(UDP)丢失许多数据包,就说明网络(或主机)太忙了。
在Solaris、AIX和其他一些UNIX平台上可以使用spray。可能需要启用spray守护进程(通常通过inetd)。启动sprayd守护进程之后,可以运行spray并指定主机名(见清单3)。
清单3。使用spray
$spraytiger
sending1162packetsoflength86totiger。。。
101packets(8。692%)droppedbytiger
70packets/sec,6078bytes/sec
正如前面提到的,不应该把速度作为可靠的性能指标,但是丢失的数据包数量是有意义的。
使用简单的网络传输测试
判断网络带宽性能的最佳方法是,在与机器收发数据时检查实际的速度。可以使用许多不同的工具执行跨许多应用程序和协议的测试,但是最简单的方法往往是最有效的。
例如,为了判断在使用NFS通过网络传输文件时的网络带宽,可以对一个简单的文件传输过程进行计时。为此,使用mkfile创建一个大文件(例如使用$mkfile2g2gbfile创建一个2GB的文件),然后通过网络把它传输给另一台机器并计算花费的时间(见清单4)。
清单4。计算通过网络把文件传输给另一台机器花费的时间
$timecp/nfs/mysql-live/transient/2gbfile。
real 3m45。648s
user 0m0。010s
sys 0m9。840s
应该多次运行测试,然后求出传输过程的平均时间,从而比较准确地了解性能水平。
可以使用清单5这样的Perl脚本自动地执行复制和计时。
清单5。使用Perl脚本自动地执行复制和计时
#!/usr/bin/perl
useBenchmark;
useFile::Copy;
useData::Dumper;
my$file=shiftordie"Needafiletocopyfrom\n";
my$srcdir=shiftordie"Needasourcedirectorytocopyfrom\n";
my$count=shift||10;
my$t=timeit($count,sub{copy(sprintf("%s/%s",$srcdir,$file),$file)});
printf("Timeis%。2fs\n",($t->[0]/$count));
返回列表