IIS易混概念小结
IIS连接数
常识:
虚拟主机会限制IIS连接数,关于其含义,差不多每个主机供应商都有一套自己的说法,微软也没有给出很明确的解释;
含义:
IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”;
一次连接:
1.网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求即一次连接(虽然有的资源请求连接响应很快)
2.如果网页采用框架(框架内部嵌套网页请求),那么一个框架(iframe)即一次连接
3.如果网页弹出窗口(窗口内部嵌套网页请求),那么一个窗口一个连接
因此,限制连接数即为虚拟主机供应公开的IIS连接数标准,如果购买的IIS连接数为50,那么我们不得不考虑网站的内容框架和访问量。
然而同,事实上,很多企业门户网站访问量低的惊人,IIS连接数为50也是绰绰有余了。
设置位置:
IIS(6.2版本,以下所有截图均此版本)中 “点击网站”->“右击切换到功能视图”->“选中一个网站”->“点击界面右侧的‘限制’链接”->“编辑网站限制”
虽然服务器中可以规定每个站点的最大连接数,但同时也存在服务器的总计最大连接数。所以,即使规定用户站点的最大连接数为不限,当服务器达到了最大连接数时,仍不能访问站点。而服务器的最大连接数一般在1000——2000。
IIS并发连接数
设置位置:“选中一个网站”->“高级设置”->"限制"->"最大并发连接数"
默认最大并发连接数为:4294967295,这是一个很惊人的数字!那么问题来了:
1. 很多虚拟主机供应商所说的无并发连接数限制真的成立吗?
2. 每个连接的处理,IIS都会开启一个线程去处理,假设这个处理方式成立,那么4294967295个并发连接请求来了是否IIS会立即启动4294967295个线程去处理?
对于1:很显然不成立,最大并发连接数的设置绝对有上限
对于2:这是很多朋友的误区,假设4294967295并发连接同时来了,IIS不会立即启动4294967295个线程去处理,因为这不现实,对于处理连接,IIS是有“最大并发工作线程数”限制的,该数字跟操作系统相关,win7系统的IIS的值是10(或者其他不确定),VS2012自带的IIS Express的值是80。对于windows服务器版本的系统的具体值不清楚,即4294967295个并发连接来了后,(这边以win7下的10为例,假设队列长度为0),iis第一时间只能启动10个工作线程去处理,那么其他4294967285必须排队,排队对用户的体验来说就是网页正在加载,但是什么都不显示,然后此时购买了据虚拟主机供应商所说的无并发连接数限制的客户就要开始狂暴了,为何购买了所谓的“无限并发连接数”,还是会一直在加载的情况,我只能说这就是IIS处理能力有限的问题了。然而队列以外的就会直接返回“HTTP Error 503. The service is unavailable.”
IIS最大并发工作线程数
这个在上面有所涉及,简单的说就是IIS在并发连接请求过来时的处理机制,它会更机智的以某个数量级为单位来分批处理,让没有处理连接请求排队等待,用户浏览器中对于排队等待的响应就是“正在加载”,这比页面直接显示“HTTP Error 503. The service is unavailable.”更加能让人接受,但是切勿气急败坏的怒点刷新按钮,因为点的越多,你的请求在排队队伍中越靠后。
当然很多朋友会说,为什么我有时候第一次刷不出来,重新多刷一次内容就出来了,
可能是:
1、页面脚本哪个地方下载或者处理出了问题,导致页面显示异常或者直接不显示
2、你重新刷新的那个秒级别的操作,web服务器更快速的已经处理好了其他队列的请求或者他人放弃了对web服务器连接请求的操作
3、路由或者宽带网络运营商问题(不稳定)
4、浏览器或者本身电脑问题
我不知道“IIS最大并发工作线程数”有无地方可以设置,知道的朋友可以给我留言,谢谢
那么现在问题来了,最大并发连接数,影响了排队的数量,那么有没有进步影响排队数量的设置? 有的:队列长度
队列长度
1. 概念:即允许排队最大连接数限制,但实际允许的最大排队长度限制,还受IIS连接数限制设置的限制,二者取小。
2. 设置:找到网站的所属应用程序池,“右击高级设置”->"常规"->"列队长度",默认是1000,可设范围是10-65535 之间。
最大工作进程数
Web园:
IIS 6.0允许将应用程序池配置成一个Web园(Web Garden),即最大工作线程数大于1的情况,当服务器的负载较小,不需要额外的工作进程时,IIS 6.0在一定的时间后(默认20分钟,可配置)自动缩减实际的工作进程数量;如果负载变大,需要额外的工作进程,IIS 6.0再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预。
设置位置:
找到网站的所属应用程序池,“右击高级设置”->"进程模型"->"最大工作进程数",默认1,最大可以设置为4000000:
注意事项:
设置依据
按照每工作进程能承载30个并发的原则来确定应用程序池的最大工作进程数。同时要注意,每个工作进程大约会占用200M左右的系统内存,在设置最大工作进程数的时候,要主要最大工作进程数与200M的乘积不要超过系统最大可用内存数。一般情况下,建议按照每次增加5个工作进程数的方式对最大工作进程数进行调整,调整完后对网站观察一段时间,如依然无法满足要求,再继续增加5个工作进程数。
session共享问题
如果网站没有用到session机制,则不会引发此问题。如果用到了session机制进行传值和保存数据,则需要考虑在应用程序池多个工作进程间进行session共享,防止出现session丢失的问题。存储方式选用StateServer或者SQLServer会更好,另外多个工作进程切换时会有上下文复制,这也是资源消耗更多地方。
合理的资源回收机制
大多数应用系统都存在工作时间使用量高、非工作时间使用量低的情况,针对这种现象,在系统非忙时应合理的释放操作系统资源,因此,应合理设置应用程序池的【限制超时】和【回收时间间隔】属性。
【小结】并发能力 = 实际队列长度限制(队列长度限制与IIS连接数限制取小)* 最大工作进程数
详细参考链接:http://www.cnblogs.com/yinhaichao/p/4060209.html