[置顶] 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. 调用Web API将文件上传到服务器的方法(.Net Core)

    最近遇到一个将Excel通过Web API存到服务器的问题,其中涉及到Excel的读取.调用API.Web  API怎么进行接收. 一. Excel的读取.调用API Excel读取以及调用API的代 ...

  2. C - Catch That Cow POJ - 3278

    //标准bfs #include <iostream> #include <cstdio> #include <algorithm> #include <cm ...

  3. iOS开发 - RunLoop理解

    RunLoop概念 运行循环,一个 run loop 就是一个事件处理的循环,用来不停的调度工作以及处理事件 作用 保持程序的持续运行 监听处理App中的各种事件(触摸事件,定时器事件,selecto ...

  4. socket编程模拟linux下的ssh代码实现

    实现思路: 1.提供输入指令的客户端: 2.提供返回执行指令结果的服务端 3.寻找服务端返回结果一次无法全部接收的解决思路 服务端代码(ssh_server.py) #coding=utf-8 imp ...

  5. ZROI提高组模拟赛05总结

    ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...

  6. 用python将多个文档合成一个

    可以参考下以下网址(读写文件):https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/ ...

  7. DWR+Spring配置使用

    一.DWR介绍 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端 ...

  8. Java的Cloneable接口还有深浅复制

    我的小记录 首先语法上,搞清除,Java有个Cloneable接口,但这个接口是没有定义方法的. 那实现了这个接口有什么用呢? 再看Object类中,有个clone()方法,这个方法提供一个浅复制的功 ...

  9. CPU占用分析

    用TOP命令很容易定位到时谁占用CPU最高 多线程的进程,我们要知道实际上占用cpu的最小单位是线程,所以肯定是众线程中的某一个或几个占用CPU过高导致的.top -H -p pid命令查看进程内各个 ...

  10. 如何尽量避免引用jQuery

    Introduction 正如jQuery所宣称的一样,Write Less, Do More.很多时候我们喜欢用它来解决问题.但增加一个库必然意味着更大的网络负担,意味着更高的页面初始载入时间.并且 ...