ISAPI多进程设置

IIS默认配置下采用的是单工作进程的工作模式,也就是只启用一个w3wp.exe进程处理所有请求,然后进程内启用多个线程来处理并发请求,最大工作线程数由具体的操作系统和IIS来决定,当并发量大于线程数时则会让请求排队等待处理。这是面对高并发量,且部分请求处理耗时较长时就会造成大部分请求长期处于挂起的状态,用户感知就是慢,TMD慢。。。。

WebGarden其实就是IIS的多工作进程的工作模式。

开启WebGarden是不是很简单呢?那问题落在到底maxWorkerProcesses设置多少才适合呢?一般建议设置为“逻辑核数”即可。

WebGarden的目的是针对大量长链接的情景,通过增加工作进程来增加可用的工作线程。

另外,我想大家都有过这样的经历。maximum worker processes为1时,并发量上扬时w3wp.exe所占的内存(专用工作集/专用字节)会急速上升,当所占内存接近2GB时响应延时就变得十分严重,唯一的办法就是等待、等待、等待。。。。。。要不就回收进程释放内存,但这时会中断用户的请求。

那为什么会这样呢?

1. 首先需要明确的是 工作线程 对应 请求 是一一对应的,因此当接收到N个请求时,就会开启N个工作线程处理请求,若请求量超过最大工作线程数时则会让请求排队;

2. 线程本身也占内存资源,就线程栈空间而言,IIS5/6每个线程栈空间就占256KB,而Windows Server 2000下则占1MB。对于Windows Server 2008下的IIS7而言,32bit则占256KB,64bit则占512KB。极端情况下即使新开的线程所处理的程序入参和局部变量只使用1KB,但线程栈依然会占512KB。更不用说程序中还用到大量堆空间的对象了;

3. 进程是分配内存资源的最小单位,也就所有工作线程均使用同一块内存空间,更重要的是所有工作线程采用同一套GC机制,那么当执行GC时将挂起所有工作线程;

4. 虽然Windows Server2008 64Bit对进程所占的内存空间没有设置上限,但若进程所占内存空间大且托管堆中含大量一次性对象那么必然会引起频繁的GC操作。(极端情况下GC占进程的执行时间片的48%左右)

也就是我们通过“任务管理器”查看w3wp.exe内存占用率升高时,响应延时增大的根本原因是:工作进程中托管堆存在大量临时对象,导致频繁执行GC操作,而GC操作执行时会挂起所有工作线程,导致请求处理的延时增大。

而WebGarden就是将工作线程均匀分配到多个工作进程中,那么各工作进程所占用的内存相对较少,减少GC操作和每次GC执行的时间,并且即使执行GC操作也不会挂起所有工作线程,从而提供并发处理量。

ISAPI多进程设置的更多相关文章

  1. IIS下Asp.Net应用程序多进程设置及Session共享

    背景: 目前项目中在单个进程的应用程序经常会遇到w3c.exe崩溃的情况,于是就设想是否可以通过IIS多进程的方案来避免出现该问题. 于是搜了下“怎么实现多进程的方案”,找到了这篇文章:http:// ...

  2. 爬虫链接mongodb 以及多线程多进程的操作

    一.连接mongodb 1.            设置数据库 client=pymongo.MongoClient(‘localhost’) 2.            db=client[‘lag ...

  3. 爬虫连接mongodb、多线程多进程的使用

    一.连接mongodb 1.            设置数据库 client=pymongo.MongoClient(‘localhost’) 2.            db=client[‘lag ...

  4. 缓存Cache

    转载自  博客futan 这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Cach ...

  5. Web 技术人员需知的 Web 缓存知识(转)

    最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...

  6. ASP.NET页面与IIS底层交互和工作原理详解

    转载自:http://www.cnblogs.com/lidabo/archive/2012/03/13/2393200.html 第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是 ...

  7. HttpModule和Http Handler (比较与区别)

    HttpModule和Http Handler (比较与区别) HttpModule概述 暂时先不考虑我们自己实现Http Module的情况.在.Net中,Http Module 是实现了IHttp ...

  8. ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0

    I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本 可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如 然后再确 ...

  9. ASP.NET页面与IIS底层交互和工作原理详解(第二回)

    引言 在 Part.1 Http请求处理流程 一文中,我们了解了Http请求的处理过程以及其它一些运作原理.我们知道Http管道中有两个可用接口,一个是IHttpHandler,一个是IHttpMod ...

随机推荐

  1. 浅析H5图片上传

    概述 最近需求上需要实现图片上传的功能,简单记录下实现过程.目前实现的功能比较简单,主要有以下几点: 图片预览 图片删除 拖拽上传 压缩上传 移动端实现方案:使用File API 主要使用到 File ...

  2. ip访问网站和localhost访问网站中top使用

    对于相对定位,使用margin-top不用简单使用top. top在localhost中能正常显示,在ip访问时会出现多余空白. margin-top不管是localhost中还是ip中都能正常显示.

  3. python全栈开发day62-两表操作增删改查,外键,if else模板语法

    一.今日内容总结: day62 内容回顾: 1. django有关所有命令: pip install django==1.11.14 django-admin startproject 项目名称 cd ...

  4. vscode git

    Git 全局设置: git config --global user.name "xxxx" git config --global user.email "123456 ...

  5. Flink--connect

    用来将两个dataStream组装成一个ConnectedStreams 而且这个connectedStream的组成结构就是保留原有的dataStream的结构体:这样我们就可以把不同的数据组装成同 ...

  6. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-3项目架构说明

    本文目录1. 摘要2. 框架介绍 3. 权限管理之多一点说明4. 总结 1.  摘要 NCMVC角色权限管理框架是由最近练习Net Core时抽时间整理的系统,后续能不能发展成一个cms还要看朋友们是 ...

  7. net core体系-web应用程序-4net core2.0大白话带你入门-10asp.net core session的使用

    asp.net core session的使用   Session介绍 本文假设读者已经了解Session的概念和作用,并且在传统的.net framework平台上使用过. Asp.net core ...

  8. Ajax+PHP实现异步上传多张图片

    Ajax+PHP实现异步上传多张图片 HTML代码 <!-- date: 2018-04-27 13:46:55 author: 王召波 descride: 多张图片上传 --> < ...

  9. HDU5692 Snacks DFS序 线段树

    去博客园看该题解 题目 HDU5692 Snacks Problem Description 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的 ...

  10. Spring Data Redis实现消息队列——发布/订阅模式

    一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...