主要使用nc测试一下网络吞吐量(throughput), 辅助工具time, pv, dd, nc
本文结合网络编程&工作中, 常用的命令, 测试一下网络吞吐量
.
我自己也是很长一段时间搞不清楚
TPS
,QPS
,吞吐量
等关系; 并且总是听别人说高性能, 但是不知道所谓的高性能是主观臆测的还是测量出来的
先来一张有趣的图.
概念梳理
注意一下带宽
, 传输速率
常常和吞吐量
扯在一起, 下面先区分一下它们.
带宽
定义:计算机网络中的主机在数字信道上,单位时间内从一段传送到另一端的最大数据量,即最大速率
, Max net bit rate
类比:一个供水管,假设管子中有流动的水,这里的水为数据。单位时间内,从管子的某个横截面就是速率,即单位时间内传送的数据量。当管子充满水的时候,管子的某个横截面就是最大速率,即带宽
单位:bps
, 和速率
一样, 注意是b
,p,
s` (bits per second).
1Byte=8bit, 即1字节=8比特
, 所以1Bps=8bps
.
网络带宽为100Mbps, 但是我们性能测试出来的吞吐量却只有10MB多一点, 就是因为单位不同: 100Mbps的带宽实际上传输速率为12.5MB/s
区分
Mbps
和MBps
以前家里电信网是4M的, 4M的理论下载速度为500KB/S,实际速率只能达到200-440KB/S.
传输速率
我们平常说的速率是
额定速率
定义:在数据传输中,两个设备之间数据流动的物理速度成为传输速率,单位为bps
单位:比特是数据量最小单位,秒是时间的最小单位, 所以速率单位为bps, 类似的,有kb/s
,Mb/s
(M=10^6),Gb/s
(G=10^9),Tb/s
(t=10^12)
上面的单位都是
bit
, 比特.通常, 你把带宽理解成传输速率是不错的, 但不准确;但是反过来说传输速率是带宽就不对了.
各种传输媒介中信号的流动速度是恒定的,即使数据链路的传输速率不同,也不会出现忽快忽慢的情况。传输速率不是指单位数据流动的速度有多快,而是指单位时间内传输的数据量有多少。
以我们生活中的道路交通为例,低速数据链路如同车道较少无法让很多车同时通过的情况,与之相反,高速数据链路就相当于有多个车道,一次允许更多车辆行驶的道路。
理论上说, 带宽越大网络传输能力就越强, 因为上限拉大了.
吞吐量
理论不等于实际, 吞吐量
, throuhgput就是实际传输速率
. 你可以从它的单位可以看出来bps
, 但是, 吞吐量不仅衡量带宽,同时也衡量主机的CPU处理能力、网络的拥堵程度等.
说的通俗一点,就是单位时间内某个(端口)实际的数据量
上面的内容都和速率有关. 下面的概念和事务
, ``
工具介绍
可以参考我的文章 net-work-tools
正式测量
为啥要测试?
当我们讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数,它取决于链路时钟速率和信道编码在计算机网络中又称为线速。我们可以说以太网的带宽是10Mbps。但是,我们需要区分链路上的可用带宽(带宽)与实际链路中每秒所能传送的比特数(吞吐量)。我们倾向于用“吞吐量”一次来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。
数据吞吐量 就是的数据包转发能力。也就是能同时转发多少数据包。也就是一个单位时间内,满负载,可以转发多少的一个数值 数据流量/秒 或者数据流量/分钟。
简单说, 为了找出服务性能的瓶颈.
一般测试方法
吞吐量的测试方法是:在测试中以一定速率发送一定数量的帧,并计算待测设备传输的帧,如果发送的帧与接收的帧数量相等,那么就将发送速率提高并重新测试;如果接收帧少于发送帧则降低发送速率重新测试,直至得出最终结果。吞吐量测试结果以比特/秒或字节/秒表示。
实际测量
在linux平台下, 借助
nc
,dd
,time
等工具, 工作远没有那么复杂.
测试环境, 本机(上海浦东金融区) –> 华北(具体不知道哪)阿里云服务器, 指定端口5000
姑且成为, A –> B 之间的测试吧, 带宽50Mbps. (阿里云的带宽应该远超50M)
下面开始几组测量:
dd+nc
A也就是本机进行写(读完即舍弃):
B,也就是阿里云服务器进行读:
time+nc
然后用time进行测试, 得出结果:
A端写的结果:
B端读的结果:
好吧, 这个结果应该是被别的因素干扰了.
分析如下:
因为dd在统计时也会占用一部分资源(或者多了一次管道读写), 具体如下图:
此外, netcat的版本也是影响测量因素的原因, 只是这个案例中没有体现出来.
who is sponsoring the site? - i shall say merlin (wizardmerlin945@gmail.com
)
欢迎发邮件给我(生活问题,请高抬贵手)
TPS QPS
一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。
TPS:Transactions Per Second(每秒传输的事物处理个数
),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。
(业务TPS = CAPS × 每个呼叫平均TPS)TPS是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
下面有个具体的例子:
一个典型的上班签到系统,早上8点上班,7点半到8点的30分钟的时间里用户会登录签到系统进行签到。公司员工为1000人,平均每个员上登录签到系统的时长为5分钟。
可以用下面的方法计算。QPS = 1000/(30*60) 事务/秒
,平均响应时间为 = 5*60 秒
,并发数= QPS*平均响应时间 = 1000/(30*60) *(5*60)=166.7
;
并发数也很好理解, 在处理响应的时间内, 能够处理的事物总个数; 即qps * 平均响应时间
.