Concurrent connection limit

这几天在做IIS 6上Web Service (WSE 2.0)的性能测试。在这个过程中陆续发现和解决了一些问题。
其中有一个问题比较有意思。我和项目组的同事发现,不论我们用C#写的模拟客户端用多少并发量来连接Web Service,服务器端监测到的并发连接数(性能记数器中的Web Service\Current Connections)总是每客户端最高2个。这使得我们无法查看服务器在大并发量下的真切反应。
那么为什么服务器会对每客户端做出最高2个并发量的限制呢?
通过查找资料,我找到了问题的根源。原来,在HTTP 1.1 Spec中针对Persistent Connections提出了这样的Practical considerations:
Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion.
以上内容表明,为了提高HTTP响应时间以及避免产生网络堵塞,HTTP连接中的客户端不应该与服务器端建立超过2个的HTTP连接。如果有更多的请求需要,那么这些请求将被pipeline到这两个HTTP连接之中,并以异步的方式传送给服务器端。举个例子:有上百辆汽车(requests)想从天津开往北京,但是天津与北京之间最多只允许修建两条公路(HTTP connection),因此这些汽车要想从天津驶往北京的话,就只能走这两条公路。
但是,有时的确需要突破这样的限制。比如我一开始提到的性能测试,我需要用尽可能少的客户端程序来模拟尽可能多的用户访问,而不能为了模拟1000个并发量同时使用500台机器来测。那么应该怎样通过一个测试应用程序来产生指定的并发数量呢?
不难看出,为了提高单一测试应用程序所产生的并发量,就应该增加两个指标:网络客户端数量和单一客户端的HTTP连接数量。就我所知,可以通过以下两种方法来分别提高这两个指标。

方法一:使用AppDomain
在. NET中,一个AppDomain就被视为网络连接中的一个客户端,因此如果希望用一个测试应用程序模拟多个客户端,那么只须创建多个AppDomain 即可。需要注意的是,对于每一个AppDomain,最高2个的连接限额仍然存在,不同之处只是我们可以使用一个测试应用程序发送超过2个的并发请求了(现在为了模拟1000个并发量就不需要找500台测试机器了)。请看下面的代码:


AppDomain appDomain = AppDomain.CreateDomain("");
appDomain.ExecuteAssembly(@"TestClient.exe");
AppDomain.Unload(appDomain);

在这里,我通过调用AppDomain的静态方法CreateDomain创建了一个新的应用程序域,并要求该应用程序域执行一个应用程序 TestClient.exe。该应用程序将负责向服务器发送请求(最多只能建立两个连接)。你可以通过多线程的方式来驱动上述代码,使得大量应用程序域在近乎相同的时间里被创建,从而就可以模拟指定数量的客户端,并产生所希望的并发访问量。

方法二:使用配置文件
除了增加客户端数量以外,我们还可以增加单一客户端所能建立的HTTP连接数量。在.NET中实现这一目标非常容易,只需要在客户端(没错,是客户端!)的配置文件中增加以下几行即可:

<system.net>
 <connectionManagement>
  <add address="*" maxconnection="100"/>
 </connectionManagement>
</system.net>

其中,connectionManagement节点负责指定客户端与某一网络主机之间所能建立的最高连接数量。它在Machine.config文件中的默认取值就是2。我们完全可以在应用程序级的配置文件中对这一限额做出更改。address属性表明该连接限额针对的是哪一个网络地址,*表明所有的网络主机;如果写成address="
www.google.com"就表明后面的maxconnection只适用于对google的访问。
好了,现在就可以根据自己的需要来更改配置了。如果你把maxconnection的取值改成了1000,那么你的测试应用程序与服务器之间所能建立的最高连接数量就是测试用应用程序域的数量 * 1000,测吧!emotion-54.gif

转载于:https://www.cnblogs.com/gxh973121/archive/2005/04/18/139484.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Material Master

02-03 03&#xff1a; 物料主的定义&#xff1a;相同的物料应该是同一个物料号。 在PP放面我们主要关心的是工厂 。 定义公司后在公司下面在定义工厂。 spro配置的时候我们可以在、后勤、物料管理、物料、创建&#xff1b; 后勤、生产、物料、创建 两种方式都可以进入物料创建…

java密码学原型算法_java密码学原型算法实现——双线性对.pdf

java密码学原型算法实现——双线性对Java 密码学原型算法实现——双线性对1、背景介绍如何使用jPBC 库进行双线性群初始化&#xff0c;包括&#xff1a;(1)质数阶双线性群(Prime-Order Bilinear Groups)&#xff1b;(2)合数阶双线性群(Composite-Order Bilinear Groups)&#x…

用啥Selenium?! .NET程序员就用自家的Playwright for .NET

提到用于Web应用程序自动化测试的工具&#xff0c;大家肯定第一个想到的就是Selenium。可以说&#xff0c;Selenium已经成为以编程方式自动化浏览器的事实标准。但是&#xff0c;Selenium作为老牌工具&#xff0c;也存在一些缺点&#xff0c;比如不支持Shadow DOM &#xff0c;…

每日一笑 | 一些关于集合的知识

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

Digest

一场倾盆大雨。站立着面对这场大雨吧&#xff01;让它的钢铁般的光芒刺穿你。你在那想把你冲走的雨水中飘浮&#xff0c;但你还是要坚持&#xff0c;昂首屹立&#xff0c;等待那即将来临的无穷无尽的阳光的照耀。 转载于:https://www.cnblogs.com/bcpl/archive/2005/05/18/1578…

iOS之NSString

做了不少时间的iOS开发了&#xff0c;现在在阅读官方文档&#xff0c;特意整理出来&#xff0c;没任何技术含量&#xff0c;纯粹是笔记形式&#xff0c;希望对自己对大家有些帮助。 首先&#xff0c;要理解NSString需要学习下字符编码&#xff08;ASCii&#xff0c;Unicode&…

java调用js查询mongo_mongodb操作之使用javaScript实现多表关联查询

一、数据控制mongodb操作数据量控制&#xff0c;千万控制好&#xff0c;不要因为操作的数据量过多而导致失败。演示一下发生此类错误的错误提示&#xff1a;二、多表关联查询实现/*声明变量bridge,用来记录两个集合所连接的桥梁。相当于sql语句中的Join on语句&#xff0c;on后…

ABP Framework 研习社经验总结(6.28-7.2)

ABP Framework 研习社经验总结&#xff08;6.28-7.2&#xff09;研习社初衷在翻译 《实现领域驱动设计》—— 基于 ABP Framework 实现领域驱动设计实用指南 时&#xff0c;因为DDD理论和实践的宽泛性&#xff0c;不同公司、不同行业、不同项目实现程度不同&#xff0c;觉得有必…

2005.5.21

早上&#xff1a; 4&#xff1a;00电话打来&#xff0c;叫我们去。 我们5&#xff1a;30才起床。 我没有意识到婆婆去世了。上午&#xff1a; 送婆婆到火葬场的车排起了长龙。 一路上&#xff0c;放炮仗&#xff0c;撒纸钱&#xff0c;撒纸元宝。到了火葬场&…

一篇万字长文读懂微软PDB、SourceLink——.net core之nuget 包调试

序言在大前年&#xff0c;为了说服框架组采用Nuget包的形式分发框架类库&#xff0c;我费了老鼻子的劲也没有取得成功&#xff0c;其中最致命的一个问题是&#xff0c;nuget包不能获得源码调试级的支持&#xff0c;在分发和包的管理形式上其比其他方案都优秀。最后折中的选择是…

IIC及OLED实验

I2C (Inter-Integrated Circuit): I2C 是一种用于在芯片之间进行短距离数字通信的串行通信协议。它允许多个设备通过两根导线&#xff08;一根数据线 SDA 和一根时钟线 SCL&#xff09;进行通信。I2C 常常用于嵌入式系统中连接传感器、存储器、显示屏和其他外设。 数据线和时钟…

放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。

做过很多winform项目&#xff0c;都为winform控件头疼不已。想实现一些漂亮的样子总是很难。我这里列举几个缺点&#xff1a; 1.winform控件大多是 绝对布局 &#xff0c;你需要给出准确的坐标。那么在实现居中效果就会很难。 2.学习成本&#xff0c;也了解各个控件的结构&…

数学建模必备算法模型,全新升级!

转眼间2019年已经过去了四分之一&#xff0c;近日&#xff0c;2019年数学建模国赛的时间也已经出来啦&#xff0c;确定为9月12日&#xff08;周四&#xff09;18时至9月15日&#xff08;周日&#xff09;20时。随着各种各样的数模比赛源源不断地开展&#xff0c;时不时有小伙伴…

好长时间没更新了

这段时间一直都在忙着写CoagelEngine&#xff0c;没时间上来更新。花了一个月的时间&#xff0c;现在基本把渲染器的框架写好了。渲染器是用Visitor模式实现的。同时API无关&#xff0c;理论上来说同样可以支持Directx&#xff0c;不过我没用过DX&#xff0c;现在只实作了GLRen…

boostrap 鼠标滚轮滑动图片_16种基于Bootstrap的css3图片hover效果

bootstrap-image-hover是一款基于Bootstrap的css3图片hover效果。这组图片hover效果共16种特效。同时该特效也支持非Bootstrap版本。使用方法在页面中引入bootstrap相关文件和FontAwesome字体图标文件以及effects.min.css文件。HTML结构该css3图片hover效果的每一种效果都有它们…

从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)...

一、移除性算法 &#xff08;remove&#xff09; C Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 // TEMPLATE FUNCTION remove_copy template < class _InIt, class _OutIt, cl…

20 种物体破剖面图,真正的让你脑洞大开

全世界只有3.14 % 的人关注了数据与算法之美有很多东西的内部世界十分复杂&#xff0c;单纯的从表面看难以窥其精锐&#xff0c;今天咱们来看那些被劈成两半展示横截面的东西&#xff1a;1.安全气囊2.打火机3.各种枪械消音器4.集装箱船5.路虎车6.曲棍球头盔7.人类心脏8.数码相机…

一个女孩子对老公/男朋友的要求

*有点害羞&#xff0c;但曾在分别的街头&#xff0c;大声说我爱你。 *同我去庙里求签&#xff0c;轻轻捉住我的手一同跪下。 *言而有信。 *从来不迟到--我迟到他不生气。 *拥抱很久、很紧--每次我起身时几乎是需要慢慢推开他。 *睡得比我迟一点&#xff0c;醒来早一点。 …

你的公司内卷化了吗?

大家看上去都很忙&#xff0c;但就是没结果怎么办&#xff1f;忙有结果都是好的&#xff0c;没有结果都是问题。其实可以从三方面来看这个问题&#xff1a;1、没有正确找到方法大家都在教科书学过一只乌鸦喝水的故事。故事告诉人们遇到困难不要放弃&#xff0c;要运用身边可以利…

java.awt.headless_以编程方式设置java.awt.headless = true

小编典典我正在使用一个main()类&#xff0c;该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。将静态加载块移到类的顶部解决了我的问题。这不起作用&#xff1a;public class Foo() {private static final Color COLOR_BACKGROUND Color.WHITE;static { /* too l…