IIS 之 应用程序池

应用程序池 → 右键(待设置应用程序池)→ 高级设置,如下图:


1、常规,如下图:



1.1 .NET CLR 版本

[managedRuntimeVersion] 配置应用程序池,以加载特定版本的 .NET CLR。选定的 CLR版本应与应用程序所使用的相应版本的 .NET Framework 对应。选择“无托管代码”将导致所有的ASP.NET请求失败。

[1] v4.0 或 V2.0 ; [2] 无托管代码;

1.2 队列长度

[queueLength] HTTP.sys 将针对应用程序池排队的最大请求数。如果队列已满,新请求将收到 503“服务不可用”的响应。默认队列长度设置是1000,范围在10-65535 之间。
超过的请求也会立刻返回“HTTP Error 503. The service is unavailable”

1.3 名称

[name] 应用程序池名称是应用程序池的唯一标识符。

1.4 启动模式

[startMode] 将应用程序池配置为在按需运行模式或始终运行模式下运行。

[1] OnDemand;[2]AlwaysRunning;

最近发现公司的网站无法访问,当我检查应用程序池(IIS 7.5)时,我看到它被停止,停止原因未知。所以我必须第一时间重新启动它。以保证网站能被正常访问。
我想到是有没有办法通过设置iis,以便在发生任何错误停止时自动重新启动应用程序。
网上找到的答案主要是:你需要将你的网站运行的应用程序池的启动模式(startMode)从onDemand(需要时)更改为AlwaysRunning(一直运行)。而默认情况下,IIS将所有应用程序池设置为onDemand。
iis8以后的版本配置启动模式(startMode)很简单,只需要去对应应用程序->高级设置即可看到启动模式的选项进行修改。 iis8以前的版本就比较麻烦了。


1.5 启用 32 位应用程序

[enable32BitAppOnWin64] 如果针对 64 位操作系统上的应用程序池将该属性设为 True,则为应用程序池提供服务的工作进程将处于 WOW64 (Windows on Windows64)模式。WOW64模式下的进程是仅加载 32 位应用程序的 32 位进程。

1.6 托管管道模式

[managedPipelineMode] 将ASP.NET配置成作为 ISAPI 扩展并以经典模式来运行。在后一种情况下,托管代码集成到请求处理管道中。

[1] Classic;[2] Integrated;

2、CPU,如下图:



2.1 处理器关联掩码

[smpProcessorAffinityMask] 强制此应用程序池的工作进程在特定 CPU 上运行的十六进制掩码。如果启用了处理器关联,则值 0 将导致错误。

2.2 处理器关联掩码(64位选项)

[smpProcessorAffinityMask2] 为64位计算机制定强制此应用程序池的工作进程在特定 CPU 上运行的高顺序 DWORD 十六进制掩码。在 64 位计算机上,smpProcessorAffinityMask 特性包含处理器掩码的低顺序 DWORD ,而 smpProcessorAffinityMask2 特性包含处理器掩码的高顺序 DWORD。

2.3 限制(百分比)

[limit] 配置允许应用程序池中的工作进程在" CPU 限制间隔 "属性指示的时间段内使用的 CPU 时间的最大百分比。如果超过“ CPU 限制 ”属性设置的限制,系统将向事件日志写入一个事件,并且可能触发一组可选事件(由“CPU 限制操作”属性决定)。如果将此属性的值设为 0 ,将禁止将工作进程限制为 CPU 时间的百分比。

2.4 限制操作

[action] 如果设置为"NoAction",将生成一个事件日志条目。如果设置为“KillW3WP”,则将在重设间隔期间关闭应用程序池并生成一个事件日志条目。如果设置为“ Throttle ”,则 CPU 使用率将限制为限制中设置的值。不使用限制间隔,并且生成一个事件日志条目。如果设置为“ ThrottleUnderLoad ”,则只有在争用 CPU 时,才限制 CPU 使用率。不使用限制间隔,并且生成一个事件日志条目。

[1] NoAction; [2] KillW3WP; [3] Throttle; [4] ThrottleUnderLoad;

2.5 限制间隔(分钟)

[resetInterval] 指定用于应用程序池的 CPU 监视和限制的重设期限(以分钟为单位)。如果自上次进程计帐重设以来所经过的分钟数等于此属性指定的分钟数,IIS 将重设日志和限制间隔的 CPU 计时器。将此属性的值设为 0 将禁用 CPU 监视。

2.6 已启用处理器关联

[smpAffinitized] 如果设为 True ,“处理器关联掩码”属性会强制为此应用程序池提供服务的工作进程在特定的 CPU 上运行。这样便可以在多处理服务器中有效使用 CPU 缓存。

3、回收,如下图:



3.1 发生配置更改时禁止回收

[disallowRotationOnConfigChange] 如果为 True,应用程序池在发生配置更改时将不会回收。

3.2 固定时间间隔(分钟)

[time] 一个时间段(以分钟为单位),超过该时间后,应用程序池将回收。值为 0 意味着应用程序池不会按固定间隔回收。

3.3 禁止重叠回收

[disallowOverlappingRotation] 如果为 True ,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程。如果工作进程加载不支持多个实例的应用程序,请将该属性设为True。

重叠回收(Overlapped Recycling),指的是当回收的时候,原来的进程继续处理正在处理的请求,同时一个新的进程被创建来处理新的Web请求。新进程在就旧进程结束之前就启动了,后续的Web请求都由新进程处理。这种机制可以避免延迟,因为旧进程可以继续接受请求直到新进程初始化完成。
这个也是IIS的默认值,如果禁用这种回收方式,则新请求都会等待,直到旧进程处理完当前请求后释放,新进程启动才能被处理。

3.4 请求限制

[requests] 应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。

3.5 生成回收事件日志条目

[logEventOnRecycle] 每发生一次指定的回收事件时便生成一个事件日志条目。

3.5.1 ISAPI 报告了非正常状态

[IsapiUnhealthy] 如果为True,则当应用程序池由于 ISAPI 扩展将其自身报告为非正常而进行回收时,系统将生成一个事件日志条目。

3.5.2 超出请求限制

[Requests] 如果为 True,则当应用程序池在超出其请求限制后进行回收时,系统将生成一个事件日志条目。

3.5.3 超出虚拟内存限制

[Memory] 如果为True,则当应用程序池在超出其虚拟内存限制后进行回收时,系统将生成一个事件日志条目。

3.5.4 固定时间间隔

[Time] 如果为True,则当应用程序池按计划的间隔进行回收时,系统将生成一个事件日志条目。

3.5.5 手动回收

[OnDemand] 如果为True,则当手动回收应用程序池时,系统将生成一个事件日志条目。

3.5.6 特定时间

[Schedule] 如果为True,则当应用程序池在计划的时间进行回收时,系统将生成一个事件日志条目。

3.5.7 已超出专用内存限制

[PrivateMemory] 如果为True,则当应用程序池在超出其专用内存限制后进行回收时,系统将生成一个事件日志条目。

3.5.8 应用程序池配置已更改

[ConfigChange] 如果为True,则当应用程序池由于其配置发生更改而回收时,系统将生成一个事件日志条目。

3.6 特定时间

[schedule] 应用程序池进行回收的一组特定的本地时间(24小时制)。

3.7 虚拟内存限制(KB)

[memory] 工作进程可以使用的最大虚拟内存量(以 KB 为单位),超过此内存量,将导致应用程序池回收。如果值为 0 ,则表示没有限制。

3.8 专用内存限制(KB)

[privateMemory] 工作进程可以使用的最大专用内存量(以 KB 为单位),超出此内存量,将导致应用程序池回收。如果值为0,则表示没有限制。

4、进程孤立,如下图:



4.1 可执行文件

[orphanActionExe] 当工作进程被废弃(孤立)时运行的可执行文件。例如,“C:\dbgtools\ntsd.exe”将调用 NTSD 来调试工作进程故障。

4.2 可执行文件参数

[orphanActionParams] 当工作进程被废弃(孤立)时所运行的可执行文件的参数。例如,如果 NTSD 是为调试工作进程故障而调用的可执行文件,则“-g -p %1%”适用。

4.3 已启用

[orphanWorkerProcess] 如果设为True ,则无响应的工作进程将被废弃(孤立),而不是终止。可以使用此功能来调试工作进程故障。

5、进程模式,如下图:



5.1 Ping 间隔(秒)

[pingInterval] 两次向为此应用程序池提供服务的工作进程发送健康状况监视 ping 所间隔的时间段(以秒为单位)。

5.2 Ping 最大响应时间(秒)

[pingResponseTime] 为工作进程指定的、响应健康状况监视 ping 的最长时间(以秒为单位)。如果工作进程不响应,将被终止。

5.3 标识

[identityType, username, password] 配置应用程序池以作为内置账户或特定的用户标识运行,内置账户也就是“应用程序池标识”(推荐)、“网络服务”、“本地系统”、“本地服务”。
原因: 访问页面时,应用程序池就自动关闭了。
方案: 在应用程序池上--右键--高级设置--进程模型--标识,更改了这项里的“内置账户”。将原有的“ApplicationPoolIdentity”更改为“NetworkService”。然后重启下应用池,所有网站浏览一切都OK了。

5.4 关闭时间限制(秒)

[shutdownTimeLimit] 为工作进程指定的、完成处理请求并关闭的时间段(以秒为单位)。如果工作进程超过关闭的时间限制,将被终止。

5.5 加载用户配置文件

[loadUserProfile] 此设置指定 IIS 是否为应用程序池标识加载用户配置文件。当此值为 True 时,IIS为应用程序池标识加载用户配置文件。如果您需要像 IIS 6.0 那样不为应用程序池标识加载用户配置文件,则此值设置为 false。

5.6 空闲超时操作

[idleTimeoutAction] 达到空闲超时持续时间后要执行什么操作。

5.7 启动时间限制(秒)

[startupTimeLimit] 为工作进程指定的、启动并进行初始化的时间段(以秒为单位)。如果工作进程初始化时间超过启动时间限制,将被终止。

5.8 启用 Ping

[pingingEnabled] 如果为 True,系统将定期对为此应用程序池提供服务的工作进程执行ping 操作,以确保这些工作进程仍及时响应。此过程称为健康状况监视。

5.9 生成进程模型时间日志条目

[logEventOnProcessModel] 为每次发生的指定进程模型事件生成一个事件日志条目。

5.9.1 空闲超时已到

[IdleTimeout] 如果为 True,则当应用程序池在超出其空闲时限制后关闭时,系统将生成一个事件日志条目。

5.10 闲置超时(分钟)

[idleTimeout] 工作进程在关闭之前可以保持闲置状态的时间(以分钟为单位)。如果某个工作进程既未处理请求,也未收到任何新的请求,则将进入闲置状态。

5.11 最大工作进程数

[maxProcesses] 可用来处理对应程序池的请求的最大工作进程数。如果此数字大于 1,则应用程序池为“Web 园”。在 NUMA 感知系统上,如果此数字为 0,则为获得最佳性能,IIS 将启动与 NUMA 节点一样多的工作进程。

 如果这个值大于 1,那么当有连接请求时会启动多个新的工作进程实例,可启动的最多进程数为所指定的最大工作进程数,后续更多的请求将以循环的方式发送至工作进程,这样每个工作进程都能承担负载一些连接请求,当然是以消耗cpu等硬件做代价,这是值得的,如果web服务器cpu使用率很低但是又需要更高效的处理并发连接请求,应当这样做。

如果网站中用到了依赖进程的Session和Cache等对象,则不能保存在服务器内存中,存储方式选用StateServer或者SQLServer会更好,另外多个工作进程切换时会有上下文复制,这也是资源消耗更多地方。

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


最大工作进程:应用池启动进程数,增加进程数可有效缓解进程池压力(注意:每增加一个进程将会增加200M内存占用,并且可能会造成用户登录状态丢失,谨慎使用。)

6、快速故障防护,如下图:



6.1 “服务不可用”响应类型:

[LoadBalancerCapabilities] 如果设为 HttpLevel,那么当应用程序池停止时, HTTP.sys 将返回 HTTP 503 错误。如果设为 TcpLevel,HTTP.sys 将重置连接。如果负载平衡器识别其中一种响应类型,并随后重定向该类型,则此设置非常有用。

6.2 故障间隔(分钟)

[rapidFailProtectionInterval] 应用程序池发生指定数量的工作进程崩溃(最大故障数)的最短时间间隔(以分钟为单位)。如果低于此间隔,应用程序池将被快速故障防护功能关闭。

6.3 关闭可执行文件

[autoShutdownExe] 当应用程序池被快速故障防护功能关闭时所运行的可执行文件。可以使用它来配置负载平衡器,将此应用程序池的通信重定向至其他服务器。

6.4 关闭可执行文件参数

[autoShutdownParams] 当应用程序池被快速故障防护功能关闭时运行的可执行文件的参数。

6.5 已启用

[rapidFailProtection] 如果设为 True,则当在指定的时间段(故障间隔)内出现指定数量的工作进程崩溃(最大故障数)的情况时,应用程序池将被关闭。默认情况下,如果在5分钟的间隔内发生5次崩溃,应用程序池将被关闭。

6.6 最大故障数

[rapidFailProtectionMaxCrashes] 应用程序池被快速故障防护功能关闭之前允许的最大工作进程崩溃数。