Imdan.cn

我的网络生活

IIS的连接数、最大并发连接数、队列长度的关系

如果我们发布了一个网站,当有1万个请求同时到来时,IIS服务器是如何处理的呢?

面对客户端发来的请求,尽管服务器可以配置超高的硬件设施,但是一单当它遇到高请求,复杂运算,高并发的情况时,仍然会受到性能的影响。对此,IIS定义了一些配置参数,可在一定程度上减轻服务器的压力,避免宕机,这些配置参数就是连接数、最大并发连接数、队列长度。

当1万个请求到来时,IIS会启动线程来处理它们,它的数量会影响到请求的响应,当然这些工作线程并不是无限开启的,要根据web服务器的CPU、内存等来定义一个合适的工作线程数目,可惜在服务器上我没看到线程数在哪里可以设置,此刻我们假设定义它的数量为N。

而IIS的连接数、最大并发连接数指的是服务器同一时间并发处理能力,避免接收过高的请求连接,其实它们代表同一个意思,这个当你在IIS设置时可以看出来。除了这两个,IIS还在应用程序池中加入了队列长度,它在并发数允许范围内,由于受限于IIS的工作线程数N,并发数中的一部分请求将被加入到队列中,而超过队列长度的请求会被阻止,即服务器会返回503错误,“HTTP Error 503. The service is unavailable”。

回到前面的问题,如果设置IIS最大并发连接数为100,队列长度设置50,那么会有100个请求将被服务器处理,剩余9900个请求直接返回503的错误。这100个请求在服务器处理时,将受到工作线程线、队列长度共同影响,你会发现除了有50个请求进入队列等待之外,另外50个请求情况有时候是不一样的,要依据IIS线程数来决定,所以这里要做个判断:
1)当N>=50时,有50个被IIS线程处理;
2)当N<50时,有N个被IIS线程处理,(50-N)个返回503错误。

解答:

1)如果N为200,则100个请求中,50个请求被加入队列,另50个请求收到正常响应。
2)如果N为40,则100个请求中,50个请求被加入队列,另50个请求有40个收到正常响应,还有10个返回503错误。

看到这里,相信你对IIS的连接数、最大并发连接数、队列长度这几个概念有了一个初步的认识。

最后再讲述一个概念,最大工作进程数。注意这个值不是线程数,而是进程数。在IIS里它的默认值是1,如果这个值设置大于 1,那么当有连接请求时会启动多个新的工作进程实例,可启动的最多进程数为您所指定的最大工作进程数,后续更多的请求将以循环的方式发送至工作进程,这样每个工作进程都能承担负载一些连接请求。当然它是以消耗cpu等硬件做代价,如果web服务器cpu使用率很低但是又需要更高效的处理并发连接请求,这是值得的。

但是,设置最大工作进程数,对网站运行时的内存中的数据共享有一定影响,如果网站中用到了依赖进程的session、Cache等对象,最好不要保存在服务器内存中,存储方式可选用StateServer或者SQLServer会更好,另外多个工作进程切换时会有上下文复制,这也是资源消耗更多地方。

说到这,以上的那些IIS中连接数、最大并发连接数、队列长度、最大工作进程数在IIS哪里可以设置?看完下面几张图你就明白了。

1)限制连接数

网站 - 管理网站 - 配置 - 限制

2)最大并发连接数设置:网站 - 管理网站 - 高级设置 - 最大并发连接数

3)队列长度设置:应用程序池 - 高级设置 - 队列长度

4)最大工作进程数:应用程序池 - 高级设置 - 进程模型 - 最大工作进程数

经过以上的分析,你能看出哪些指标是评判我们网站的处理能力的呢?最重要的指标莫过于“每秒处理请求数”,这个数字也叫吞吐率。如果每个请求处理速度非常快,那么网站吞吐率就大,吞吐率大那么支持的同时在线人数就大。CPU的计算能力是如何影响网站的处理能力的呢?还是那么多请求,如果CPU很强大,能够缩减每个请求的处理时间,那必然会提高吞吐率。还有很多的请求,如果花在网络传输或者到数据库的传输时间比较多,这部分等待时间CPU是闲置的,如果能够提高CPU的利用率,也可能提高网站的处理能力,最充分的利用服务器的资源。如果不想改代码而想提高CPU利用率,可以在IIS的应用程序池中设置最大工作进程数,调整这个数值需要特别注意每一个工作进程是独立的应用程序,全局静态变量不共享,前面已经提过。

最后,遗留的问题是IIS的工作线程数怎么设置呢?我觉得这个数值和服务器的操作系统、硬件设备相关,可惜目前还没找到可设置的地方。




评论

© Imdan.cn | Powered by LOFTER