如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
作为.Net开发人员,其实对IIS的应用程序池知之甚少,在工作中我也有几次遇到过网站无故打不开的情况,找了半天原因也找不到是怎么造成的,有一次我给网站找了一个程序程序池后发现就能正常访问了,这也让我对辨别是问题产生了好奇和疑问,于是开始找这方面的一些资料,原来IIS的应用程序池一般默认都会自动回收的,默认有29个小时回收一次,所以很多时候因为不是上班时间我们没有遇到过,那么对于互联网web应用,如何在用户毫无感知的情况下回收程序池?(对用户产生最小的影响)
简单理解IIS应用程序池
应用程序池可以看成是装载计算机分配给Web应用程序的内存的容器。
网络上有人这样比喻:如果内存是水,那么应用程序池就是鱼缸,Web应用程序就是鱼缸里的金鱼。多个Web应用程序可以放在同一个应用程序池里面,也就是说一个鱼缸可以养多条金鱼。如果金鱼多了,鱼缸的的空间有限,那么金鱼之间就会争抢生存空间,不是很坚固的鱼缸就会破裂,所有的金鱼(网站)就会受到影响,即内存不足,造成内存溢出的问题。如果时间久了,鱼缸里面的水质就会变差,金鱼就好像生活在臭水沟里,因此我们需要定期换水(回收程序池)。
程序池自动回收优化
IIS的程序池默认回收间隔是1740分钟(29小时),在自动回收过程中,应用程序池将会清空,保留在内存中的数据将会被清理(相当于IIS重启)。对于互联网应用程序,为了减少数据库服务器的负担,也许会选择将大量数据暂存在内存中,回收会造成内存数据丢失,如果没有及时保存到数据库中,可能导致应用程序出问题。如果遇到系统使用高峰期,回收将可能导致一段时间应用程序无响应(出现假死状态),给予用户一种很不好的体验。 在优化应用程序池之前,我们应用先了解下程序池的几个配置信息:

发生配置更改时禁止回收:如果为True,应用程序池在发生配置更改时将不会回收。
固定时间间隔(分钟):超过设置的时间后,应用程序池回收,为0意味着应用程序池不会按固定间隔回收。 系统默认设置的时间是1740分钟(29小时)。
禁用重叠回收: 如果为true,将发生应用程序池回收,以便在创建另一个工作进程之前退出现有工作进程。
请求限制: 应用程序池在回收之前可以处理的最大请求数。如果值为0,则表示应用程序池可以处理的请求数没有限制。
生成回收事件日志条目: 每发生一次指定的回收事件时便产生一个事件日志条目,里面的明细设置不一一介绍。
问题分析:每1740分钟(29小时)回收一次是否合理?
不太合理,这个周期内,有可能应用程序处于访问高峰期。因为每天的回收时间都是不一样的,很有可能在高峰期回收,就会造成短时间内网站访问出现问题。因此,要避免最大程度的减少对用户的影响,我们需要充分的分析应用程序的访问情况,例如哪个时间段是高峰,哪个时间段访问人数最少。了解到这些后,应用程序部署人员就应该设定固定的回收时间,例如一个网站凌晨两点访问人数是最少的,那么它可以设置“特定回收时间”在凌晨两点,应用程序池里面的特定时间是支持设定多个的,请注意。
一、选择每天凌晨2点回收


二、每周周六深夜回收
我们推荐采用windows “任务计划程序”配置一个操作系统定时任务执行脚本程序来实现IIS回收,设置方便,也可以灵活调整。 要通过脚本执行IIS的功能,需要在IIS安装配置的时候,勾选上管理工具中的“IIS管理脚本和工具”(见下图)。

用vbs脚本及批处理文件,结合任务计划程序,保证在每周六深夜1点执行IIS回收。
|
Recyclepool.vbs 文件内容: appPoolName = WScript.Arguments(0) Set oWebAdmin = GetObject("winmgmts:root\WebAdministration") Set oAppPool = oWebAdmin.Get("ApplicationPool.Name='" + appPoolName + "'") oAppPool.Recycle set fso=createobject("scripting.filesystemobject") if (fso.fileexists("d:\appPool\recycleIISPool.log")) then '1-forreading,2-forwriting,8-appending set file=fso.opentextfile("d:\appPool\recycleIISPool.log",8,ture) else set file=fso.createtextfile( "d:\appPool\recycleIISPool.log",8,ture) end if 'write(x)写入x个字符,writeline写入换行,writeblanklines(n)写入N个空行 file.writeline now&" 应用程序池“"&appPoolName &"”已经回收成功。" file.close |
|
Recyclepool.bat文件内容: cscript D:\appPool\recyclepool.vbs platweb |
用vbs脚本及批处理文件,结合任务计划程序,保证在每周六深夜1点执行IIS回收。

成功用windows计划任务解决IIS定时回收问题。
如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?的更多相关文章
- 【如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?】
作为.Net开发人员,其实对IIS的应用程序池知之甚少,前段时间被问到一个问题: 对于互联网web应用,如何在用户毫无感知的情况下回收程序池?(对用户产生最小的影响) 简单理解IIS应用程序池 应用程 ...
- Quartz定时任务和IIS程序池闲置超时时间冲突解决方案
一.问题描述 Bs项目中用Quartz功能执行一个定时任务(每隔5分钟执行一个Job),正常情况,Quartz定时任务会5分钟执行一次,但IIS程序池闲置 超时默认为20分钟,造成的结果是:定时任务只 ...
- [翻译]为什么IIS应用程序池回收时间默认被设置为1740分钟?
作者:斯科特 福赛斯/Scott Forsyth日期:2013/04/06地址:http://weblogs.asp.net/owscott/why-is-the-iis-default-app-po ...
- 为什么IIS应用程序池回收时间默认被设置为1740分钟?
作者:斯科特 福赛斯/Scott Forsyth日期:2013/04/06地址:http://weblogs.asp.net/owscott/why-is-the-iis-default-app-po ...
- iis 程序池设置及详解-20180720
[非原创,好文收藏,分享大家] 公司的一个网站程序长时间运行后,速度变慢,重新启动网站后速度明显变快,估计是网站程序占用的内存和CPU资源没能及时释放,才需要每隔一段时间重启网站释放资源.但手工重启总 ...
- 解决IIS程序池回收webapi定时程序造成的影响
问题描述: webapi中有一个定时器线程,在iis程序池在1740分钟回收后,定时器中止 问题解决步骤: 1.设置程序池定期回收,设置每天定时回收 2.在windows自带的任务计划中,添加一条任务 ...
- IIS内存溢出-设置IIS的应用程序池
在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量.在machine.config(C:/WINDOWS/Microsoft.NET/Framework/v ...
- C#IIS网站应用程序池启动回收停止 .
//添加应用程序池空间引用using System.DirectoryServices;using System.Text; using System.Text.RegularExpressions; ...
- IIS基本设置、回收机制、性能、并发、安全性
通常把站点发布到IIS上运行正常后,很少会去考虑IIS提供的各种参数,如何配置才是最适合当前站点运行需要的?这篇文章,从基本设置.回收机制.性能.并发.安全性等IIS设置讲解应当如何优化. 先来“II ...
随机推荐
- Docker: Unknown – Unable to query docker version: x509: certificate is valid for
I was playing around with Docker locally and somehow ended up with this error when I tried to list ...
- 【Lua】LuaForWindows_v5.1.4-46安装失败解决方案
下个补丁vcredist_x86.exe 可以到下面连接下载: https://download.csdn.net/download/tvcctv27tv/10344318
- Windows 下 Git 安装与初始配置
官方下载地址:https://git-scm.com/download/win,我下载的最新版是 Git-2.15.1.2-64-bit.exe . Windows 下安装步骤 1.相关信息,直接“ ...
- WinForm 之 应用程序开机自启动设置方法
一.原理 需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下. 二.实现方式 方法1:在生成安装程序时配置: 方法2:在程序运行时动态配置. 三.在生成安装程序时配置 1.右击安装 ...
- 【jeecg-mybatis版本】 mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成
Jeecg-Mybatis版本代码生成器演示视频 http://pan.baidu.com/share/link?shareid=243717&uk=2668473880 简要说明 JE ...
- 微信小程序 - radio/checkbox自定义组件
更新 2019-01-26:首次发布 2019-01-27:增加默认取值选中radio/checkbox,checkbox需在onload取值 2019-01-28:增加radio取值不存在红色提示和 ...
- Linux多线程同步之相互排斥量和条件变量
1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...
- bash shell 获取当前正在执行脚本的绝对路径
https://my.oschina.net/leejun2005/blog/150662 http://blog.csdn.net/10km/article/details/51906821 如题, ...
- 表访问方式---->全表扫描(Full Table Scans, FTS)
全表扫描(Full Table Scans, FTS) 全表扫描是指Oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位 ...
- Java程序监控指标
监控指标: 1.CPU平均使用率 2.内存平均使用率 3.应用程序错误数 4.应用程序请求量 5.应用平均响应时间 6.硬件I/O指标 7.JMX 7.1.Full gc count 7.2.Full ...