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


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

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

1概述

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

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

根据以往的经验值,在主流的PC-SERVER主机(XeonE5645@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、合理的资源回收机制

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

3Asp.NetSession共享设置

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

表1Session保存方式

方式名称

存储方式

性能

Off

设置为不使用Session功能

InProc

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

最高

StateServer

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

性能损失10-15%

SQLServer

设置将Session存储在SQLServer中。

性能损失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.NetStateService”,点击右键,选择【属性】,如图4所示:

图4Asp.NetStateService

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

图5启动服务

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

3.2注意事项

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

2、StateServer服务器必须为WindowsServer操作系统,如WindowsServer2003或WindowsServer2008

优质内容筛选与推荐>>
1、洛谷P3199 [HNOI2009]最小圈(01分数规划)
2、Think 数据库的链接配置
3、int和char的相同和不同。
4、apue2 阅读笔记--第十章
5、使用Fastjson解析并更改数据的一些操作


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号