在Azure中使用Load Runner测试TCP最大并发连接数
对于Azure中的每一台虚机,它所能支持的TCP最大并发连接数是50万(参考微软官网: http://azure.microsoft.com/en-us/documentation/articles/azure-subscription-service-limits/#networkinglimits)。在绝大部分情况下,应用程序不会触及这一限制,从而感觉不到这个限制的存在。但是,在一些极端情况,例如我们设计这样一个测试案例:在Azure中创建一台虚机,并安装Nginx服务器。使用多台Load Runner客户端,持续向Azure中的这台服务器发送HTTP请求。当Load Runner的客户端机器个数足够多,并且网络环境良好,这样的测试有可能会达到50万并发连接数的限制。
为什么会有这个限制?有如下原因:
1. Azure作为公有云平台,是一个共享的平台。我们不希望个别用户或者虚机,占用了绝大部分的平台资源。这样,对平台上的其他用户是不公平的。
2. 根据我们的调研,绝大部分应用程序在这个限制下完全可以正常工作。
如果应用程序需要比50万更多的并发连接怎么办?解决方案如下:
1. 横向扩展应用服务器。例如一台服务器支持50万,那么两台就是100万。这个数字跟随机器数的增加而线性增长。
2. 调整建立TCP连接的方法。例如建立长连接或连接池。
下面,我们详细讲解一个测试案例,供读者参考。
测试案例分享:
硬件环境:
在同一个公有云平台的区域中,使用1台2核虚拟机作为服务器, 4台4核的虚拟机作为客户端分别对服务器进行压力测试。
软件环境:
在服务器上,运行Ubuntu 操作系统。此外安装Nginx 1.4.6作为Web Server。统一部署一个4个字节的index.html文件,用作测试网页的下载。

在客户端上,运行Windows操作系统, 安装HP Load Runner 11,针对服务器的地址进行压力测试。每台客户端上,Load Runner 模拟200个用户同时向服务器发送5分钟请求,获取所有的事务tps信息,包括成功,失败和中止。

在Load Runner下,编写如下脚本进行测试。其中[URL]的部分根据不同的环境进行修改。
Action()
{
web_url(“webserver",
"URL=[URL]",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
return 0;
}
例如:

网络环境:
笔者通过两种方式进行了这项测试,得到同样的测试结果。第一种方式,我们将Load Runner安装在Azure平台的虚机中。第二种方式,通过本地数据中心的Load Runner向Azure中的虚机发起请求。网络拓扑结构如下。请注意,这里画出的四台客户机只是示意,在实际的测试中,我们使用了2台、4台、6台和8台的多种场景。

测试结果:
在测试初期,我们将Load Runner跑在Azure中,得到了如下的TPS图形。
从上面的途中我们在一台Load Runner中看到,当每秒处理的事务数达到430的时候(这时我们共有6台机器,服务器端的TPS在430x6=2500TPS左右),服务器突然不接受任何新的请求,TPS骤然间变成了0。经过排查,我们发现该测试触及了另一个限制 - 每个云服务开放的TCP源端口不得超过64000。

要绕开这一限制,有两个方法:
1. 将Load Runner放到不同的云服务中。
2. 为每台测试机指定Public IP。http://msdn.microsoft.com/en-us/library/azure/dn690118.aspx
为虚机指定了Public IP后,或者使用本地机房的物理机所谓客户端,我们即得到了下面的测试结果:

上面的测试持续1小时9分钟,我们并没有发现TPS骤降的现象。这一现象说明,在我们的测试中,服务器的50万并发连接限制没有影响客户端的结果,从而也不会影响客户体验。
结论:
在实际的应用程序设计中,我们可以根据具体的应用程序场景,运用本文谈到的测试方法,来得到系统的指标 - 一台服务器可支持的并发事务处理数(TPS)。通常,服务器处理的瓶颈并不在于TCP并发连接数,而是系统的处理能力,例如数据库查询等。接下来,我们需要检验自己的应用程序是否可以横向扩展,通过增加多台服务器,比较测试结果,我们就可以了解横向扩展的性能变化。根据这两个指标(单台机器处理能力,横向扩展性能指标),我们就可以预估系统的规模。
本文转载自:http://blogs.msdn.com/b/cciccat/archive/2014/08/18/azure-load-runner-tcp.aspx
在Azure中使用Load Runner测试TCP最大并发连接数的更多相关文章
- 测试TCP/IP配置
安装网络硬件和网络协议之后,我们一般要进行TCP/IP协议的测试工作,那么怎样测试才算是比较全面的测试呢?我们认为,全面的测试应包括局域网和互联网两个方面,因此应从局域网和互联网两个方面测试,以下是我 ...
- 在Azure中的Ubuntu中安装Open edX
最近,由于工作原因,在Azure上的Ubuntu虚拟机中安装了Open edX 实例,安装过程遇到了不少问题, 在从网上找答案的过程中,学习到了不同的知识. 注:若Ubuntu虚拟机Setup在Glo ...
- tsung压力测试——tcp测试tsung.xml配置模版说明
<?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1 ...
- 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像
Azure 中的每个虚拟机 (VM) 都是基于定义 Windows 分发和操作系统版本的映像创建的. 映像可以包括预安装的应用程序和配置. Azure 应用商店为最常见的操作系统和应用程序环境提供了许 ...
- 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器
若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...
- 详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题
本文提供详细的故障排除步骤,用于为基于 Windows 的 Azure 虚拟机诊断和修复复杂的远程桌面错误. Important 若要消除更常见的远程桌面错误,请务必先阅读远程桌面的基本故障排除文章, ...
- 对连接到 Azure 中 Linux VM 时出现的问题进行详细的 SSH 故障排除的步骤
有许多可能的原因会导致 SSH 客户端无法访问 VM 上的 SSH 服务. 如果已经执行了较常规的 SSH 故障排除步骤,则需要进一步排查连接问题. 本文指导用户完成详细的故障排除步骤,以确定 SSH ...
- 在实战中使用nginx-rtmp遇到的TCP连接问题分析
在实战中使用nginx-rtmp遇到的TCP连接问题分析 背景 前段时间公司做了一次体育赛事的现场直播,网络由某通信公司负责搭建,主要测试5G CPE上行网络的带宽和稳定性,为了做到万无一失,他们同时 ...
- 【原创】时隔十年,再度审视Performance Testing,性能测试,Load Runner,和企业级性能测试解决方案
软件测试入行是2006年,最先学习的测试工具囊括了QTP,Test Director,Load Runner,Rational Robot,Rational Performance: 那时的操作系统是 ...
随机推荐
- ASP.NET页面生命周期总结(1)
图解:1) 浏览器 :把用户的操作封装成一个请求通过socket发送到后台服务器. 后台服务器:首先有个内核模块Http.sys 和针对每个应用程序池都有一个请求队列.然后请求到达http.sys ...
- UIKit各类概述
1.UIAcceleration: 被叫做加速事件的一个UIAcceleration类的实例是用来代表即时的三维加速数据.为了接收重力加速度,要注册一个应用应用程序作为一个共享UIAccelerate ...
- HDU 2501 Tiling_easy version(简单递推)
Tiling_easy version Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有 ...
- HDU 5351 MZL's Border (规律,大数)
[HDU 5351 MZL's Border]题意 定义字符串$f_1=b,f_2=a,f_i=f_{i-1}f_{i-2}$. 对$f_n$的长度为$m$的前缀$s$, 求最大的$k$满足$s[1] ...
- Java面向对象程序设计--泛型编程
1. 为何要进行泛型编程? 泛型变成为不同类型集合提供相同的代码!省去了为不同类型而设计不同代码的麻烦! 2. 一个简单泛型类的定义: public class PairTest1 { public ...
- 桶排序之python实现源码
tmp = [] def bucket_sort(old): for i in range(len(old)): tmp.append([]) for i in old: tmp[int( i * l ...
- 九度OJ 1370 数组中出现次数超过一半的数字
题目地址:http://ac.jobdu.com/problem.php?pid=1370 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2 ...
- ubuntu intelliJ IDEA 12.1.4 安装
1 php插件 http://plugins.jetbrains.com/plugin/?id=6610 把插件下载到一个目录下,如果插件不兼容,多试几个版本! 2 打开ide, FILE -> ...
- datatable的数据转置
没有具体测试过,5w条数据在i5机器上大概是1.3~2s左右,但是个人感觉就是在处理数据库的分页或者是写条件的时候会有一些麻烦,不如使用数据库分页! 但是这种方法不失为一种思路 private voi ...
- 在Linux下不使用密码远程登陆其他Linux
有时需要再一台Linux上登陆其他Linux服务器,通常可以直接使用SSH命令,加入两台服务器一台服务器A,IP地址192.168.1.2,另一台服务器B,IP地址192.168.1.3,如果想从A服 ...