Imdan.cn

我的网络生活

IIS的current connections的测试

Current Connections 是当前与 Web 服务建立的连接数。

在监控和分析web服务性能的时候,我们会用到这个指标,但一直以来也仅对它了解个大概,今天我用几个例子加深自己对current connections的认识和理解。 

首先,这个连接数是怎么来的呢?简单来说,当打开浏览器访问一个网站时,浏览器会向服务器发送请求,请求服务器的资源,资源通常是指网页、css、js或图片资源。这些请求发生的连接数将被记录在current connections当中。这只是表面现象,那它的内部原理是怎么样的呢?这得先回顾下HTTP协议。

当浏览器访问网站时,会和服务器建立HTTP连接,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。在HTTP 1.1中可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。我认为,即使服务器接收到客户服务发送的“保持连接”的请求,但是如果客户端在服务器限定的超时时间内,没有与服务器发生活动,服务器将认为客户端已处于“下线”状态,以释放服务器用于连接的资源。因此,HTTP建立的一次连接就是一个连接数。

接着,我开始以下几个测试。

仅页面访问

页面+图片

页面+CSS

页面+JS

页面+图片、js、css

测试环境:

服务器:windows server 2008 R2 、IIS7.5

浏览器:IE9

准备工作:

为了便于记录连接数,我使用性能监视器来记录。方法是打开“性能监视器”,选择,性能-数据收集器集-用户自定义,新建“数据收集器集”,选择Web Service下的current connections,之后,启动开始记录,定义收集频率1s,日志文件记录在路径:C:\PerfLogs\Admin\currentconnection下。文件名是“Performance Counter.tsv”。

1)、仅页面访问测试

新建一个asp.net网站,测试页面是page.aspx。用ie打开一个窗口访问该页面,在该窗口内按住F5持续刷新,查看收集器,数值一直处于1。1s内我按住F5实际发起请求数肯定是>1的,但得到的连接数却是1,可见请求数不等于连接数。

接着测试多窗口访问,此刻再用按F5的方式操作是没法做到的。为了方便测试,我在页面上插入了一段js脚本,按200ms的频率定时刷新页面。之后,用ie开启30个窗口访问refresh.aspx。这里说明下30个窗口是什么样的一个方式,我是开启了6个ie进程,每个ie进程打开5个选项卡,这样总的就是30个窗口。测试后查看收集日志,发现current connections从0开始,逐渐上升为30,最终保持30个连接数。

2)、页面+图片

新建一个pagepics.aspx页面,插入23张图片,用ie打开一个窗口访问该页面,总请求数24。假如定时刷新脚本,时间间隔800ms,测试后,获得最终的连接数10。

新开一个窗口,这时,共有2个ie窗口访问pagepics.aspx,测试后,获得最终的连接数20。

再开一个窗口,这时,共有3个ie窗口访问pagepics.aspx,测试后,获得最终的连接数还是20。

之后,我继续新开窗口,访问pagepics.aspx,测试后发现连接数一直处于20,不再升高。但再往后我我继续打开窗口测试,连接数又会开始上升。这说明同一台电脑的浏览器连接数在一定时刻是有上限的,这应该是浏览器自身的特性,不同的浏览器会有不同的结果。

3)、页面+CSS

新建一个pagecss.aspx页面,引入23个css文件,测试步骤和结果同2)。

4)、页面+JS

新建一个pagejs.aspx页面,引入23个js文件,用ie打开一个窗口访问该页面,总请求数24。假如定时刷新脚本,时间间隔200ms,测试后,获得连接数是1,没错是1,和上面的结果不一样。这很是奇怪,然后我试着开启几个窗口瞬时调用不同的js时,连接数会上升,如果仅通过页面访问,页面里的js的连接数却不算。

5)、页面+图片、js、css

最后一个测试,新建一个default.aspx页面,插入一张图片,引入一个css文件、一个js文件,总请求数是4。但测试后发现连接数是1,结果和4)相同。

测试结论:

1.同一台电脑的浏览器连接数在一定时刻是有上限的,这应该是浏览器自身的机制,不同的浏览器会有不同的结果。

2.不能把请求数等同于连接数。如果单独通过网页窗口访问一个资源,算一个连接数,但是如果是在同一个页面里访问不同的资源时,不能简单地把请求数累计当做请求数,往往总的连接数是肯定小于等于请求数的。

3.以上测试是通过IE9,IE版本不同,或者使用其他浏览器如chrome测试的结果又不一样。

4.浏览器关闭时,连接不是立马断开的,连接关闭有一定延迟。




评论

© Imdan.cn | Powered by LOFTER