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. nginx 源码安装的重启命令

    源码安装nginx就面临这样的麻烦,不能使用service nginx restart 来重启nginx,没办法只能重新加载下nginx. #/usr/local/nginx/sbin/nginx - ...

  2. angularjs 中通过 $location 进行路由跳转传参

    $location.path('/page1').search({id: $scope.id,name:$scope.name}); 带参数跳转页面,在新的页面通过$routeParams接收参数 $ ...

  3. Could not locate executable null\bin\winutils.exe in the Hadoop binaries解决方式 spark运行wordcoult

    虽然可以正常运行,但是会出异常,现给出解决方法. 1.问题:   2.  问题解决: 仔细查看报错是缺少winutils.exe程序. Hadoop都是运行在Linux系统下的,在windows下ec ...

  4. Cyclic Nacklace hdu3746 kmp 最小循环节

    题意:给出一段字符串  求最少在最右边补上多少个字符使得形成循环串(单个字符不是循环串) 自己乱搞居然搞出来了... 想法是:  如果nex[len]为0  那么答案显然是补len 否则  答案为循环 ...

  5. TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值—Jason niu

    #TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值 import tensorflow as tf input1 = tf.placeholder ...

  6. POJ 3237 Tree 【树链剖分】+【线段树】

    <题目链接> 题目大意: 给定一棵树,该树带有边权,现在对该树进行三种操作: 一:改变指定编号边的边权: 二:对树上指定路径的边权全部取反: 三:查询树上指定路径的最大边权值. 解题分析: ...

  7. PostgreSQL 的命令行工具 psql 的常用命令

    1. 连接服务器: psql -h 192.168.1.88 -U username -d databasename 2. 切换数据库: \c dbname 3. 列出所有数据库: \l 4. 列出所 ...

  8. XML相关的安全漏洞-XXE,XPATH小结

    0x00前言: 本文主要小结以下php下的xpath查询xml结构的漏洞利用和XXE漏洞利用 xml是可扩展标记语言,它被设计出来是为了存储传输数据的. 它的结构是树形结构,并且标签要成对出现比如下面 ...

  9. git 将主分支的提交合并到分支上(主分支同步到分支)

    通常都会遇到将分支修改的内容合并到主分支中,但是在主分支中修改了内容怎么同步到分支上呢,这个时候需要将主分支上的提交操作在分支上再做一次: 1.首先在主分支上执行: git log 2.找到你想要同步 ...

  10. format 用法

    hon2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱.语法 它通过{}和:来代替% ...