[置顶] IIS应用程序池多工作进程设置及Session共享

 

在调优iis的时候,朋友分享给我一个特别棒的设置方法步骤,感谢好朋友的分享。

IIS应用程序池多工作进程设置及Session共享

1 概述

微软的IIS作为Windows平台下Asp.Net网站发布的默认WEB服务器,在性能上提供了比较大的弹性和可伸缩性,通过应用程序池工作进程数的设置,可以支持从几十到上万并发数量的访问。本文档对相应设置过程进行操作指引,并对设置过程中的注意事项进行重点描述。

2 应用程序池多工作进程设置

根据以往的经验值,在主流的PC-SERVER主机(Xeon E5645 @ 2.4GHz,6核心12线程,32G内存)上,每个应用程序池的单一工作进程,能够大约承受30-50个左右的并发,如果超出此并发数量,可能会出现IIS无法响应、或响应时间明显变长的问题。通过合理设置应用程序池的最大工作进程数,可显著提高IIS应对高并发的能力,减少网站响应时间。

2.1 设置步骤

1、 找到待设置网站对应的应用程序池,如图 1所示:

图 1 找到应用程序池

2、 在所选应用程序池上点击右键,选择【高级设置】,如图 2所示:

图 2 高级设置

3、 在弹出的【高级设置】窗口中找到【最大工作进程数】,并设置为合理值,如图 3所示:

图 3 设置最大工作进程数

4、 点击【确定】按纽保存设置。

2.2 注意事项

1、 最大工作进程数值的设置依据

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

2、 session共享问题

如果网站没有用到session机制,则不会引发此问题。如果用到了session机制进行传值和保存数据,则需要考虑在应用程序池多个工作进程间进行session共享,防止出现session丢失的问题。此问题的解决措施见session共享设置。

3、 合理的资源回收机制

大多数应用系统都存在工作时间使用量高、非工作时间使用量低的情况,针对这种现象,在系统非忙时应合理的释放操作系统资源,因此,应合理设置应用程序池的【限制超时】和【回收时间间隔】属性。

3 Asp.Net的Session共享设置

Asp.Net提供了以下几种Session保存机制,如表 1所示:

表 1 Session保存方式

方式名称

存储方式

性能

Off

设置为不使用Session功能

InProc

设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值

最高

StateServer

设置为将Session存储在独立的状态服务中。通常是aspnet_state.exe进程

性能损失10-15%

SQLServer

设置将Session存储在SQL Server中。

性能损失10-20%

Custom

自定制的存储方案

由实现方式确定

在Asp.Net程序的web.config配置文件中对Session的保存方式进行设置。如果不显示指定Session的保存方式,默认使用InProc的方式保存,即Session由提供服务的工作进程保存。

为了提高IIS对高并发的支持,可以增加应用程序池的工作进程数,IIS会根据内置的调度算法,将用户的请求在多个工作进程间动态分配,如果搭建了服务器集群和负载均衡,则用户请求会在多台机器的多个工作进程间进行动态分配。在上述情况下,如果Session的保存方式依然为InProc,则用户请求在多个工作进程间切换时可能出现Session丢失的情况,导致请求失败或出错。

为解决上述为,需要将Session的保存方式设置为共享,即表 1中的“StateServer”、“SQLServer”或“Custom”方式。这几种方法中,“SQLServer”方式需要安装独立的SQLServer数据库,“Custom”方式需要自行实现相应的Session存储与检索过程,部署起来相对复杂,相对上述两种方式,“StateServer”方式在功能性和可实施性上最好,因此下文重点介绍此种Session共享机制。

3.1 设置步骤

1、 确定StateServer服务器。如果只有一台WEB服务器,可指定当前服务器为StateServer服务器。如果存在多台服务器集群,可指定集群中的一台符合较轻的服务器作为StateServer服务器。

2、 修改注册表,允许远程访问StateServer服务。可直接导入如下脚本。

端口默认为42424,可根据需要进行修改,下文均以42424为例。

3、 打开【管理工具】-【服务】,找到“Asp.Net State Service”,点击右键,选择【属性】,如图 4所示:

图 4 Asp.Net State Service

在弹出的【属性】窗口中,将【启动方式】改为“自动”,然后点击【启动】按纽启动服务,如图 5所示:

图 5 启动服务

4、 打开待修改网站主目录下的web.config配置文件,搜索找到“<sessionstate>”配置节点,如果不存在配置节点,则在“<system.web>”节点下新建“<sessionstate>”配置节点,并将节点属性修改为:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" />
其中“tcpip=*”后的主机IP地址和端口可根据实际情况修改。修改完后保存配置文件即可。

3.2 注意事项

1、 Session中保存的自定义对象必须显示标记为可序列化“[serializable]”。如果未显示标记为可序列化,则在访问页面时会报错。

2、 StateServer服务器必须为Windows Server操作系统,如Windows Server 2003或Windows Server 2008。

[置顶] IIS应用程序池多工作进程设置及Session共享的更多相关文章

  1. 关于IIS应用程序池的默认参数设置解决

    关于IIS应用程序池的默认参数设置,一般如下设置以满足IIS站点的需要. 1.关于IIS站点的启动模式,以及处理请求的管道模式设置. 2.回收机制设置, A)若IIS站点程序中存在单例模式访问DB数据 ...

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

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

  3. 故障公告:IIS应用程序池停止工作造成博客站点无法访问

    非常抱歉,今天凌晨博客站点负载均衡中所有3台服务器的IIS应用程序池突然停止工作,造成 1:20-7:45 左右博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解. 服务器操作系统是 Window ...

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

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

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

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

  6. 应用程序池--IIS最大工作进程数

    IIS 6.0允许将应用程序池配置成一个Web园(Web Garden).要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程 ...

  7. iis最大工作进程数

    IIS 6.0允许将应用程序池配置成一个Web园(Web Garden).要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程 ...

  8. IIS 6.0的web园 最大工作进程数细谈

    这篇文章主要介绍了IIS 6.0的web园 最大工作进程数,需要的朋友可以参考下:(摘自:http://www.jb51.net/article/84817.htm) IIS 6.0允许将应用程序池配 ...

  9. IIS应用程序池配置详解及优化

    参数说明 1.常规 属性名称 属性详解 NET CLR 版本 配置应用程序池,以加载特定版本的 .NET CLR.选定的 CLR版本应与应用程序所使用的相应版本的 .NET Framework 对应. ...

随机推荐

  1. 51nod 1049【经典】

    自己模拟,全靠体会~ #include <cstdio> #include <stack> #include <iostream> #include <str ...

  2. 51nod 1456【强连通,缩点,并查集】

    话说这道题的机遇是看到了http://blog.csdn.net/u010885899/article/details/50611895很有意思:然后就去补了这题 题意: 建最少的边使得给出的点相连. ...

  3. git clone 之后 , 如何复制文件到文件夹 并 上传

    1. 关于 _netrc machine github.com login myid password mypassword machine bitbucket.org login myid pass ...

  4. css 所有选择器 实例与总结

    目录 什么是选择器? 选择器都有那些呢? 标签选择器 ID选择器 类选择器 后代选择器 子代选择器 组合选择器 交集选择器 相邻兄弟选择器 通用兄弟选择器 属性选择器 伪类选择器 什么是选择器? 在c ...

  5. javaScript中for-in语句

    for-in语句是一种精准的迭代语句,用来枚举对象的属性 实例: <!DOCTYPE html><html><head> <title>For-In S ...

  6. C语言提高代码效率的几种方法

    一段完美的代码不仅在于找到一个给定的问题的解决方案,但在它的简单性,有效性,紧凑性和效率(内存).设计的代码比实际执行更难.因此,每一个程序员当用C语言开发时,都应该保持这些基本的东西在头脑中.本文向 ...

  7. react native的Navigator组件示例

    import React, {Component} from 'react';import {ScrollView, StyleSheet, Text, View, PixelRatio} from ...

  8. Caffe实战五(Caffe可视化方法:编译matlab接口)

    接上一篇文章,这里给出配置caffe后编译matlab接口的方法.(参考:<深度学习 21天实战Caffe 第16天 Caffe可视化方法>) 1.将Matlab目录更新至Caffe的Ma ...

  9. Mysql的跨服务器操作

    1.查询FEDERATED功能是否开启: show ENGINES; 2.如果状态为NO则需修改my.ini文件,增加一行federated配置: my.ini配置文件的默认路径 C:\Program ...

  10. Redis的发布和订阅

    Redis的发布和订阅 Redis发布订阅(pub/sub)是一种消息通信模式,pub发布消息,sub接收消息.(pub/sub)是一种生产者消费者模式,是实现消息队列的一种方式 redis的订阅和发 ...