Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS。


本文为大家普及一下关于iis性能指标的各种概念:连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解,感兴趣的同学参考下。

一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数

顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”

这边客户请求的连接内容包括:

1、网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求即一次连接(虽然有的资源请求连接响应很快)

2、如果网页采用框架(框架内部嵌套网页请求),那么一个框架即一次连接

3、如果网页弹出窗口(窗口内部嵌套网页请求),那么一个窗口一个连接

虚拟主机供应商在IIS(6.2版本,以下所有截图均此版本)中  “点击网站”->“右击切换到功能视图”->“点击界面右侧的‘限制’链接”->“编辑网站限制”

限制连接数即为虚拟主机供应公开的IIS连接数标准,如果购买的IIS连接数为50,那么我们不得不考虑网站的内容框架和访问量

如果网站图片够多,弹窗窗口随意(可能连时间选择框、简单条件筛选框也用弹出新窗口),加上不得已的打开新页面浏览内容,那么仅仅能容忍10个人同 时操作也很正常,我不会把这个操作描述为很多网站说的“10同时在线”,这很容易让人误解,在用户的一次请求(表面上可能是刷新一次网页,实际上内部请求 不止一次,事实上很少只有一次)都完成得到服务器响应完毕之后,连接全部会被释放,当然在你看到展示的页面之前,内部嵌套如果有请求图片等连接请求,连接 会早早的被释放

事实上,很多企业门户网站访问量低的惊人,IIS连接数为50也是绰绰有余了

IIS并发连接数


“管理网站”->“高级设置”->"限制"->"最大并发连接数"

其实,普通用户常说的“IIS链接数”就是这边的“最大并发连接数”,如果PC端有IIS的朋友,可以测试上面两个图片的设置,是相互影响的

这边默认最大并发连接数为:4294967295,这是一个很惊人的数字,难道这代表着网站能具有并发执行连接数为4294967295的能力?

这边我做几个假设:

1、很多虚拟主机供应商所说的无并发连接数限制真的成立吗?

2、每个连接的处理,IIS都会开启一个线程去处理,假设这个处理方式成立,那么4294967295个并发连接请求来了是否IIS会立即启动4294967295个线程去处理?

对于1:很显然不成立,最大并发连接数的设置绝对有上限

对于2:这是很多朋友的误区,假设4294967295并发连接同时来了,IIS不会立即启动4294967295个线程去处理,因为这不现实,对于处理连接,IIS是有“最大并发工作线程数”限制的,这是我下面要介绍的,我从一些资料上查阅到,该数字跟操作系统相关,win7系统的IIS的值是10(或者其他不确定),VS2012自带的IIS Express的值是80。对于windows服务器版本的系统的具体值不清楚,即4294967295个并发连接来了后,(这边以win7下的10为例),iis第一时间只能启动10个工作线程去处理,那么其他4294967285必须排队,排队对用户的体验来说就是网页正在加载,但是什么都不显示,然后此时购买了据虚拟主机供应商所说的无并发连接数限制的客户就要开始狂暴了,为何购买了所谓的“无限并发连接数”,还是会一直在加载的情况,我只能说这就是IIS处理能力有限的问题了

当然服务器没有直接返回“HTTP Error 503. The service is unavailable.”应该也算是一些你花更多钱的安慰吧,因为你只购买了IIS连接数为50的话,那么第50+1个连接请求操作得到的就直接是 “HTTP Error 503. The service is unavailable.”了

另外,如果web服务器的硬件设备够爽朗(牛逼),那么IIS的工作线程也会处理的更快,那么响应的用户等待的时间也会更短(前提是你的IIS连接数够大哦,否则就直接503了哦)

总的来说,最大并发连接数,影响了排队的数量,

很多时候需要我们评估自己的网站的最大并发连接数,然后来进行设置最佳数量

IIS最大并发工作线程数


这个在上面有所涉及,简单的说就是IIS在并发连接请求过来时的处理机制,它会更机智的以某个数量级为单位来分批处理,让没有处理连接请求排队等待,用户浏览器中对于排队等待的响应就是“正在加载”,这比页面直接显示“HTTP Error 503. The service is unavailable.”更加能让人接受,但是切勿气急败坏的怒点刷新按钮,因为点的越多,你的请求在排队队伍中越靠后。

当然很多朋友会说,为什么我有时候第一次刷不出来,重新多刷一次内容就出来了,

可能是:

1、页面脚本哪个地方下载或者处理出了问题,导致页面显示异常或者直接不显示

2、你重新刷新的那个秒级别的操作,web服务器更快速的已经处理好了其他队列的请求或者他人放弃了对web服务器连接请求的操作

3、路由或者宽带网络运营商问题(不稳定)

4、浏览器或者本身电脑问题

我不知道“IIS最大并发工作线程数”有无地方可以设置,知道的朋友可以给我留言,谢谢

那么现在问题来了,最大并发连接数,影响了排队的数量,那么有没有进步影响排队数量的设置? 有的:队列长度

队列长度


假设最大连接数设置为100,1000个并发连接请求过来了,首先900直接返回给客户“HTTP Error 503. The service is unavailable.”

然后IIS先启动(假设最大并发工作线程数为10)10个线程处理请求,其他90个进入排队状态,如果此时如下操作:

找到网站的所属应用程序池,“右击高级设置”->"常规"->"列队长度",设置为20

那么实际情况又会变成什么样子呢?只会有20个进入排队状态了,70(90-20)个请求也会立刻返回“HTTP Error 503. The service is unavailable”

iis默认队列长度设置是1000,范围在10-65535 之间

最大工作进程数


IIS 6.0允许将应用程序池配置成一个Web园(Web Garden)

找到网站的所属应用程序池,“右击高级设置”->"进程模型"->"最大工作进程数",默认1

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

如果网站中用到了依赖进程的Session和Cache等对象,则不能保存在服务器内存中,存储方式选用StateServer或者SQLServer会更好,另外多个工作进程切换时会有上下文复制,这也是资源消耗更多地方

最大工作进程数的设置方法:(拷贝)按照每工作进程能承载30个并发的原则来确定应用程序池的最大工作进程数。同时要注意,每个工作进程大约会占用 200M左右的系统内存,在设置最大工作进程数的时候,要主要最大工作进程数与200M的乘积不要超过系统最大可用内存数。一般情况下,建议按照每次增加 5个工作进程数的方式对最大工作进程数进行调整,调整完后对网站观察一段时间,如依然无法满足要求,再继续增加5个工作进程数。

IIS:连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解的更多相关文章

  1. [转]LINUX最大线程数及最大进程数

    原文:https://blog.csdn.net/wowocpp/article/details/86673886 --------------------- cat /proc/sys/kernel ...

  2. Java 编程要点之并发(Concurrency)详解

    计算机用户想当然地认为他们的系统在一个时间可以做多件事.他们认为,他们可以工作在一个字处理器,而其他应用程序在下载文件,管理打印队列和音频流.即使是单一的应用程序通常也是被期望在一个时间来做多件事.例 ...

  3. [Linux] 关于Centos6中ulimit nproc用户进程数的限制

    一.缘由: 在启动mongodb的时候,有Warning提示soft rlimits too low,就是用户使用进程数过小,遂调高系统资源关于用户最大进程数的限制ulimit -u. 先暂时使设置生 ...

  4. Linux记录-进程数和句柄数调整

    1.cat /etc/security/limits.confwebuser soft nofile 65535webuser hard nofile 65535webuser soft nproc ...

  5. (转)AIX下修改用户最大进程数

    AIX下修改用户最大进程数 原文:http://blog.csdn.net/feichideche/article/details/39498555 使用AIX时候,切换用户,发现进程一直挂起,查看用 ...

  6. K8s工作流程详解

    在学习k8s工作流程之前,我们得再次认识一下上篇k8s架构与组件详解中提到的kube-controller-manager一个k8s中许多控制器的进程的集合. 比如Deployment 控制器(Dep ...

  7. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的

    IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫" ...

  8. 你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

    原文链接:http://www.cnblogs.com/yinhaichao/p/4060209.html?utm_source=tuicool&utm_medium=referral 一般购 ...

  9. 转载:IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数

    一.IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”. 客户请求的连接内容包括: [ ...

  10. IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数

    一.IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”. 客户请求的连接内容包括: [ ...

随机推荐

  1. 优秀 H5 案例收集 vol.4(不定期更新)

    重返木叶村 http://hyrz.qq.com/act/a20160113muyecun/index.html 飞越淘宝奇市 https://g.alicdn.com/fdilab/flyover- ...

  2. Django学习笔记之Django Form表单详解

    知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...

  3. 20145329《Java程序设计》实验四总结

    实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 1.搭建Android环境 2.安装Android,核心是配置JDK. ...

  4. 通过map文件了解堆栈分配(STM32、MDK5)--避免堆栈溢出

    环境:STM32F103C8T6,MDK5 在最近的一个项目的开发中,每当调用到一个函数,程序就直接跑飞.debug跟进去看不出什么逻辑错误,但发现函数内局部变量声明之后,全局变量的值被清零,后来查看 ...

  5. 再也不学AJAX了!(三)跨域获取资源 ① - 同源策略

    我们之前提到过,AJAX技术使开发者能够专注于互联网中数据的传输,而不再拘泥于数据传输的载体.通过AJAX技术,我们获取数据的方式变得更加灵活,可控和优雅. 但是AJAX技术并不是一把万能钥匙,互联网 ...

  6. Java 面试题基础概念收集

    问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地 ...

  7. C#(Wpf)实现小键盘

    花了一天时间小键盘基本功能已完成,先看看效果图吧! 默认: Shift: Caps Lock: Button style <Style x:Key="KeyButton" T ...

  8. Anaconda 环境中使用pip安装时候出现的一些问题

    author:pprp date:18/8/12 --- 1. AttributeError: Module Pip has no attribute 'main' solution:降低pip的版本 ...

  9. [小问题笔记(十一)] SQL SERVER 将可空字段改为 NOT NULL不可为空的两个方法

    一个字段里面有一些数据是NULL是很讨厌的,写查询麻烦不说,最重要的is null  或者is not null都是不能命中索引的,会导致全表扫描啊. 所以对于一个已经存在NULL的字段,有时间的话最 ...

  10. Nginx的坑

    Nginx的重启命令:./nginx -s reload  有时候没有效果,原因不知, 要重启可以使用:killall nginx,然后./nginx  (就是先kill掉Nginx,然后再重启Ngi ...