作为.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程序池的回收时间,才能最大程度的减少对用户的影响?的更多相关文章

  1. 【如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?】

    作为.Net开发人员,其实对IIS的应用程序池知之甚少,前段时间被问到一个问题: 对于互联网web应用,如何在用户毫无感知的情况下回收程序池?(对用户产生最小的影响) 简单理解IIS应用程序池 应用程 ...

  2. Quartz定时任务和IIS程序池闲置超时时间冲突解决方案

    一.问题描述 Bs项目中用Quartz功能执行一个定时任务(每隔5分钟执行一个Job),正常情况,Quartz定时任务会5分钟执行一次,但IIS程序池闲置 超时默认为20分钟,造成的结果是:定时任务只 ...

  3. [翻译]为什么IIS应用程序池回收时间默认被设置为1740分钟?

    作者:斯科特 福赛斯/Scott Forsyth日期:2013/04/06地址:http://weblogs.asp.net/owscott/why-is-the-iis-default-app-po ...

  4. 为什么IIS应用程序池回收时间默认被设置为1740分钟?

    作者:斯科特 福赛斯/Scott Forsyth日期:2013/04/06地址:http://weblogs.asp.net/owscott/why-is-the-iis-default-app-po ...

  5. iis 程序池设置及详解-20180720

    [非原创,好文收藏,分享大家] 公司的一个网站程序长时间运行后,速度变慢,重新启动网站后速度明显变快,估计是网站程序占用的内存和CPU资源没能及时释放,才需要每隔一段时间重启网站释放资源.但手工重启总 ...

  6. 解决IIS程序池回收webapi定时程序造成的影响

    问题描述: webapi中有一个定时器线程,在iis程序池在1740分钟回收后,定时器中止 问题解决步骤: 1.设置程序池定期回收,设置每天定时回收 2.在windows自带的任务计划中,添加一条任务 ...

  7. IIS内存溢出-设置IIS的应用程序池

    在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量.在machine.config(C:/WINDOWS/Microsoft.NET/Framework/v ...

  8. C#IIS网站应用程序池启动回收停止 .

    //添加应用程序池空间引用using System.DirectoryServices;using System.Text; using System.Text.RegularExpressions; ...

  9. IIS基本设置、回收机制、性能、并发、安全性

    通常把站点发布到IIS上运行正常后,很少会去考虑IIS提供的各种参数,如何配置才是最适合当前站点运行需要的?这篇文章,从基本设置.回收机制.性能.并发.安全性等IIS设置讲解应当如何优化. 先来“II ...

随机推荐

  1. Redis:按照正则批量删除key

    Redis按照正则批量删除key redis目前还不支持批量删除key的命令,但是我们有时需要删除符合某个规则的keys,有两种方式: 1.使用redis-cli keys "test*&q ...

  2. Linux反编译

    转自:http://bbs.pediy.com/showthread.php?threadid=11315 一个简单的linux crackme的逆向前言    最不喜欢的就是写破解教程,酒后一时冲动 ...

  3. redis 基本性能测试说明

    http://ghoulich.xninja.org/2016/11/17/how-to-use-redis-benchmark-to-measure-performance/

  4. Ubuntu mysql开启远程登录的方法

    一.问题 Ubuntu  16.0.4   mysql5.7 二.解决问题 Ubuntu中MySQL的配置文件是在/etc/mysql/mysql.conf.d/mysqld.cnf,VI该文件把 b ...

  5. HTML常见元素及其属性总结

    HTML视频看完了.视频非常短,主要讲述了有关HTML中经常使用的标记和元素属性的使用.这对理解web开发有非常大的帮助.之前做过的牛腩新闻公布系统中用到了非常短HTML元素,仅仅是跟着视频做,非常多 ...

  6. HttpWebRequest: Remote server returns error 503 Server Unavailable

      I have a client server application written in C# .Net 2.0. I have had the client/server response/r ...

  7. 怎样在一个项目里用logger在控制台打印信息

    第一步: 导入jar包,maven项目可以直接添加 <dependency><groupId>log4j</groupId><artifactId>lo ...

  8. ASP入门(十九)- SELECT 语句

    SELECT 语法 Access 中 SELECT 完整语法如下: SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [ ...

  9. Nutch的安装和配置

    Nutch是一个Java实现的网络爬虫.Nutch的安装可以使用二进制包,也可以使用源代码安装.这里介绍用二进制包安装. 1. 下载apache-nutch-1.12-bin.tar.gz,并且解压, ...

  10. SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验

    对客户端传过来的参数,在使用前一般需要进行校验. SpringMVC框架内置了Validator验证接口,但是实现起来太麻烦.我们一般使用 hibernate-validator进行数据校验. 1:j ...