关于并发,关于IIS你真的了解吗?(一)
本文仅代表带个人观点及理解,本人只是一个编程小菜鸟,如果有不对的地方。请大佬轻喷!
前言:对于很多工作时间短或者编程经验不足的程序员来说,大多数会觉得并发这个词离自己太遥远,之所以知道并发也不过是因为受那些技术大佬成天讨论并发等问题耳濡目染罢了。更有甚者,一些所谓的“项目经理”。一边侃侃而谈“大数据”,“高并发处理”等等高级问题,一边理所当然的写出Select * 或者是毫无规范性的性能极差的代码。当然这也跟国内的大环境有一定的关系,导致很多程序员紧紧只想满足功能完成任务即可。实际上并发的处理是和我们日常工作息息相关的无论初级,中级,高级程序员。本文将从整体架构和日常工作,两个角度来分别讲解关于并发的两三事。只想了解日常工作中如何规范化的童鞋下拉到自己关心的部分查看阅读。
说道并发,首先你需要了解几个词语:
IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、最大工作进程数调试
IIS连接数
一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数
顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”
这边客户请求的连接内容包括:
1、网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求即一次连接(虽然有的资源请求连接响应很快)
2、如果网页采用框架(框架内部嵌套网页请求),那么一个框架即一次连接
3、如果网页弹出窗口(窗口内部嵌套网页请求),那么一个窗口一个连接
限制连接数即为虚拟主机供应公开的IIS连接数标准,如果购买的IIS连接数为50,那么我们不得不考虑网站的内容框架和访问量
如果网站图片够多,弹窗窗口随意(可能连时间选择框、简单条件筛选框也用弹出新窗口),加上不得已的打开新页面浏览内容,那么仅仅能容忍10个人同时操作也很正常,我不会把这个操作描述为很多网站说的“10同时在线”,这很容易让人误解,在用户的一次请求(表面上可能是刷新一次网页,实际上内部请求不止一次,事实上很少只有一次)都完成得到服务器响应完毕之后,连接全部会被释放,当然在你看到展示的页面之前,内部嵌套如果有请求图片等连接请求,连接会早早的被释放
事实上,很多企业门户网站访问量低的惊人,IIS连接数为50也是绰绰有余了
IIS并发连接数
其实,普通用户常说的“IIS链接数”就是这边的“最大并发连接数” ,我这边IIS默认最大并发连接数为:4294967295,这是一个很惊人的数字,难道这代表着网站能具有并发执行连接数为4294967295的能力?
这边我做几个假设:
1、很多虚拟主机供应商所说的无并发连接数限制真的成立吗?
2、每个连接的处理,IIS都会开启一个线程去处理,假设这个处理方式成立,那么4294967295个并发连接请求来了是否IIS会立即启动4294967295个线程去处理?
对于1:很显然不成立,最大并发连接数的设置绝对有上限
对于2: 这是很多朋友的误区,假设4294967295并发连接同时来了,IIS不会立即启动4294967295个线程去处理,因为这不现实,对于处理连接,IIS是有“ 最大并发工作线程数 ”限制的,这是我下面要介绍的,我从一些资料上查阅到, 该数字跟操作系统 相关,win7 系统的IIS的值是10(或者其他不确定),VS2012自带的IIS Express的值是80。对于w indows 服务器版本的系统 的具体值不清楚,即4294967295个并发连接来了后,(这边以win7下的10为例),iis第一时间只能启动10个工作线程去处理,那么其他42949672 85 必须排队,排队对用户的体验来说就是网页正在加载,但是什么都不显示,然后此时购买了据虚拟主机供应商所说的无并发连接数限制的客户就要开始狂暴了,为何购买了所谓的“无限并发连接数”,还是会一直在加载的情况,我只能说这就是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、浏览器或者本身电脑问题
那么现在问题来了,最大并发连接数,影响了排队的数量,那么有没有进步影响排队数量的设置? 有的:队列长度
队列长度
假设最大连接数设置为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 之间
最大工作进程数
应用程序池一般默认最大工作进程数为1,可以找到网站的所属应用程序池,“右击高级设置”->"进程模型"->"最大工作进程数" 来修改设置
如果这个值大于 1,那么当有连接请求时会启动多个新的工作进程实例,可启动的最多进程数为您所指定的最大工作进程数,后续更多的请求将以循环的方式发送至工作进程,这个每个工作进程都能承担负载一些连接请求,当然是以消耗cpu等硬件做代价,这是值得的,如果web服务器cpu使用率很低但是又需要更高效的处理并发连接请求,为何不这么做呢?
如果网站中用到了依赖进程的Session和Cache等对象,则不能保存在服务器内存中,存储方式选用StateServer或者SQLServer会更好,另外多个工作进程切换时会有上下文复制,这也是资源消耗更多地方
最大工作进程数调试
最大工作进程数的设置方法:(拷贝)按照每工作进程能承载30个并发的原则来确定应用程序池的最大工作进程数。同时要注意,每个工作进程大约会占用200M左右的系统内存,在设置最大工作进程数的时候,要主要最大工作进程数与200M的乘积不要超过系统最大可用内存数。一般情况下,建议按照每次增加5个工作进程数的方式对最大工作进程数进行调整,调整完后对网站观察一段时间,如依然无法满足要求,再继续增加5个工作进程数。
关于并发,关于IIS你真的了解吗?(一)的更多相关文章
- 支持高并发的IIS Web服务器常用设置
适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows ...
- 支持高并发的IIS Web服务器常用设置 II
适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows ...
- 支持iis高并发
支持高并发的IIS Web服务器常用设置 适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows ...
- 支持10W高并发请求的IIS Web服务器常用设置
支持高并发的IIS Web服务器常用设置 适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows ...
- 使用IIS 7.0 Smooth Streaming 优化视频服务
http://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html (支持高并发的IIS Web服务器常用设置) ht ...
- IIS 之 在IIS7、IIS7.5中应用程序池最优配置方案
找到Web站点对应的应用程序池,"应用程序池" → 找到对应的"应用程序池" → 右键"高级设置..." 一.一般优化方案 1.基本设置 [ ...
- Java:并发不易,先学会用
我从事Java编程已经11年了,绝对是个老兵:但对于Java并发编程,我只能算是个新兵蛋子.我说这话估计要遭到某些高手的冷嘲热讽,但我并不感到害怕. 因为我知道,每年都会有很多很多的新人要加入Java ...
- IIS优化整理
IIS 之 在IIS7.IIS7.5中应用程序池最优配置方案 找到Web站点对应的应用程序池,“应用程序池” → 找到对应的“应用程序池” → 右键“高级设置...” 一.一般优化方案 1.基本设置 ...
- IIS 优化
http://www.cnblogs.com/wangjingblogs/archive/2013/02/27/2934706.html 通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请 ...
随机推荐
- PHP学习笔记-4(时间戳)
在学习PHP时间戳的时候,发现了一个有趣的现象,就是发现用strtotime()这个函数返回的时间戳跟人家的不一样,以为是自己哪里写错了,后来发现不是这样的. 是因为设置的时区不同,从而导致了时间显示 ...
- Start to write blogs 【开始写博客】
I used to be lazy and wrote no blogs. I used to live at leisure and wasted opportunity. Time flies, ...
- 2017TSC世界大脑与科技峰会,多角度深入探讨关于大脑意识
TSC·世界大脑与科技峰会是全世界范围内的集会,多角度深入探讨关于大脑意识体验来源这一根本话题,我们是谁,现实的本质是什么,我们所处宇宙空间的本质为何.该峰会由亚利桑那大学意识研究中心主办. 会议时间 ...
- mac下安装MySQL完整步骤(图文详情)
原文摘自:http://www.jb51.net/article/103841.htm 最近使用Mac系统,准备搭建一套本地web服务器环境.因为Mac系统自带PHP和apach,但是没有自带mysq ...
- 关于SqlServer远程跨库修改数据
今天遇到一个需求需要修改远程服务器上的数据,如何直接修改,并且垮库,跨库简单,直接加上数据库名字,远程的话则需要创建链接服务器,具体步骤如下: --创建链接服务器 exec sp_addlinked ...
- VR全景加盟、720全景、VR全景技术平台-全国招商模式疯狂开始
VR全景:互联网与实体店的完美结合 VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容.硬件又分为VR头显和辅助设备,内容又分为VR全景和VR虚拟内容,如游戏.娱乐.根据行 ...
- 自坑实录 - Asp.net MVC中无法使用@Ajax.BeginForm问题解决
创建空的web项目,通过Nuget引用mvc组件来搭建空的MVC项目时, 在视图页面中无法使用@Ajax.BegForm来进行异步提交数据, 而新建默认的MVC模板项目却能够正常使用@Ajax.Beg ...
- XSS攻击及预防
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插 ...
- Jdk1.6 JUC源码解析(7)-locks-ReentrantLock
功能简介: Java代码层面提供的锁机制,可做为Synchronized(jvm内置)的替代物,和Synchronized一样都是可重入的. 与Synchronized相比较而言,ReentrantL ...
- RabbitMQ学习2---使用场景
RabbitMQ主页:https://www.rabbitmq.com/ AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现.它主要包括以下组件: 1.Serve ...