IIS应用程序池优化方案web
服务器常常产生“应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制。进程 ID 是 '3504'。”的错误,致使iis处于假死状态,经了解是IIS应用程序池的设置问题。解决方法以下(红色字为标记):安全
Internet 信息服务(IIS)管理器->应用程序池->DefaultAppPool->右击属性1、回收
一、回收工做进程(分钟):选中,值为1740 (800)
二、回收工做进程(请求数目): (不选)(原先设置为35000)
三、在下列时间回收工做进程:不填 (03:00)
四、消耗太多内存时回收工做进程:全不选。(二、三、4项可能避免了在访问量高的时候强制回收进程可能引起的服务器响应问题,致使iis假死不响应) (最大虚拟内存350,最大使用的内存200)
2、性能 (都不选)
只选中空闲超时20分钟。其余都不选。WEB园最大工做进程数为1(默认)。注意web园这里必定要保持默认,若是填写其余超过1的数字就会致使一些网站程序的后台程序打不开或者刷新不停。
原来的请求队列限制为4000,如今无限制。 (要选就是10000)
3、运行情况
(启用PING,默认)
(启动快速失败保护的钩去掉!)
为了不真的遇到不少错误时没有提示,能够不关闭,只是把快速保护的保护范围加大些,例如失败数50次 时间段5分钟 则关闭对应的程序。
(启动时间限制90秒,关闭时间限制180秒。)
“关闭时间限制180秒”是必须的,由于进程关闭的时间,原来为90秒限制,是默认值,若是进程关闭时间超过90秒,则认为超时,从而出现:进程关闭时间超过了限制 日志,因此,适当延长这个时间,能够避免这种错误!
IIS6.0应用程序池回收和工做进程服务器
公司的一个网站程序长时间运行后,速度变慢,从新启动网站后速度明显变快,估计是网站程序占用的内存和CPU资源没能及时释放,才须要每隔一段时间重启网站释放资源。但手工重启总不能算解决问题的方法,怎样才能实现自动管理呢?IIS6.0的应用程序池自动回收功能能够解决这一问题。网络
应用程序池是将一个或多个应用程序连接到一个或多个工做进程集合的配置。由于应用程序池中的应用程序与其余应用程序被工做进程边界分隔,因此某个应用程序池中的应用程序不会受到其余应用程序池中应用程序所产生的问题的影响。并发
为Web程序配置应用程序池须要如下步骤:1)建立应用程序池,右键单击“应用程序池”,“新建/应用程序池”,命名为KefuAppPool;2)为Web程序指定应用程序池,在网站虚拟目录属性“应用程序设置”里面的“应用程序池(N)”里选择KefuAppPool;3)应用程序池自动回收方式的设置。回收方式有以下几种:app
a.根据运行时间性能
系统默认是1740分钟,也就是29个小时,这个不是很好控制,建议不用。优化
b.请求数目网站
这个要看具体的状况了。若是只有10个请求,但是有5个都在请求那个比较占资源的页面(多是统计年度报表之类),这个时候就会出现进程当掉的状况,若是请求有1000个但是一个也没运行比较占资源的页面,这个时候进程确定是很正常的,因此根据请求的数目来决定也不必定符合实际须要。spa
c.计划的时间
这个其实很好,不过具体什么时间回收好呢?一般咱们都是设置在凌晨两三点钟,这个时候回收是有必要的,不过针对出现随时可能出现是高内存占用并非很适用。
d.内存(虚拟内存或已使用的内存)
这个针对出现内存问题引发的进程当掉实在太合适了,不过设置多大的值比较好是一个很重要的问题,值不能过小了,不然若是访问量都很大超过这个值的时候也会自动回收,这个就很不必了。必定要多多观察进程的实际占用状况再作决定。
下面重点谈谈对工做进程回收应用程序池的理解。
默认状况下,WWW服务创建“重叠回收”,即继续运行要终止的工做进程,直到启动新的工做进程后为止。 在重叠回收方案中,要回收的进程继续处理请求,同时 WWW 服务建立一个替代工做进程。在中止旧工做进程以前启动新的工做进程,而后将请求定向到新的进程。此设计能够防止服务中断,由于旧进程关闭前仍然保持与 HTTP.sys 的通讯以处理请求。由于可重叠关闭或启动的关闭超时值是能够配置的,因此在工做进程仍在处理请求的同时能够终止该进程(若是它在时间限制内没有处理完请求的话)。
注意:当 WWW 服务回收某个工做进程时,它并不断开现有的 TCP/IP 链接。HTTP 协议堆栈 (HTTP.sys) 创建并维护 TCP/IP 链接。
IIS中的每一个应用程序池由一个“工做进程”进行管理,也就是"W3wp.exe" 进程。若是有多个应用程序池中的程序运行,咱们就能看到多个w3wp.exe。这点能够在任务管理器中看到,以下图所示,任务管理器中有两个w3wp.exe进程,刚好对应两个有应用程序在运行的应用程序池。
在命令提示符下运行iisapp -a,能够查看w3wp.exe和哪一个应用程序池关联。
下图显示了手动执行应用程序池KefuAppPool的回收,在回收前,回收中和回收后应用程序池和工做进程状况。咱们注意到:回收过程当中增长了一个工做进程(PID=3896),该工做进程(PID=3896)启动好后,旧的工做进程(PID=5716)才被中止,新工做进程(PID=3896)正式替代旧进程工做,这就很好的防止了应用程序池回收过程当中服务被中断,保证了程序的连续运行。而其余两个应用程序池对应的工做进程 PID都没用变。该图很好的展现了应用程序池回收的过程。

应用程序池这个东西着实让管理服务器的人头疼,若是不设置好网站随时有可能罢工,甚至拖累服务器。所以特意找来此文章供你们参考。
另外说一点,若是网站访问量不是很大,晚上没什么人访问,能够尝试凌晨重启服务器,这样能够提升服务器的速度,为次日的访问作准备。
IIS 6的核心在于工做进程隔离模式,而应用程序池则是定义工做进程如何进行工做,所以,能够说应用程序池是整个IIS 6的核心。
和IIS 5中只能使用单个应用程序池不一样,工做在工做进程隔离模式的IIS 6能够建立多个应用程序池,不一样的应用程序池之间是彻底隔离的,某个应用程序池中止服务时不会影响到其余应用程序池。
在使用应用程序池以前,你应该肯定你所须要的应用程序池数量。可能有不少朋友会认为,既然不一样的应用程序池之间是彻底隔离的,那么我只须要为每一个Web站点建立一个应用程序池就能够了。这个办法在IIS服务器上具备较少的Web站点数量时可使用,可是若是IIS服务器上具备不少Web站点数量,那么这个办法就不适用了,由于不一样的应用程序池在被访问时都会建立各自的工做进程,当大量的工做进程并发工做时会消耗大量的系统资源和CPU利用率,反而会下降服务器性能。你应该根据Web站点的重要性、隔离性、所运行代码的安全性和稳定性等来对IIS服务器上所具备的Web站点进行划分,而后根据状况来决定所须要的应用程序池数量。对于那些很是重要的Web站点、须要单独隔离的Web站点、所运行代码稳定性和安全性并不可靠的Web站点配置为使用各自独立的应用程序池,而将其余普通的Web站点配置为使用一个公共的应用程序池。
默认状况下,在安装IIS时会建立一个默认网站并建立一个名为DefaultAppPool的应用程序池为其使用;默认配置下的应用程序池已经能够很好的进行工做,建议你只有在特别须要时才对应用程序池进行配置。
配置应用程序池属性
在IIS管理控制台中展开应用程序池文件夹,而后右击对应的应用程序池,点击属性,你能够在应用程序池的属性中进行如下配置:
回收
在回收标签,你能够设置工做进程的回收方式:

回收工做进程(分钟):在工做进程运行多少分钟后回收工做进程,默认启用,而且设置为1740分钟(29小时);
回收工做进程(请求数目):在工做进程处理多少 个HTTP请求后终止此工做进程,默认禁用,若是启用则默认值为35000;
在下列时间回收工做进程:在指定的时间回收工做进程,默认禁用;如需启用,勾选后点击添加按钮添加回收的时间便可,使用24小时制定义回收的时间;
消耗太多内存时回收工做进程:
最大虚拟内存(兆):当工做进程使用的虚拟内存达到设置的值时回收工做进程,默认禁用,若是启用则默认值为500 M;建议设置为不超过虚拟内存总数的70%;
最大使用的内存(兆):当工做进程使用的物理内存达到设置的值时回收工做进程,默认禁用,若是启用则默认值为192 M;建议设置为不超过物理内存总数的60%;
另外须要注意的是,应用程序池具备如下两种工做进程回收方式,不过这两种回收方式均不会形成Web服务的中断:
默认状况下,应用程序池使用重叠回收方式。在这种方式下,当应用程序池要关闭某个工做进程时,会先建立一个工做进程,直到新的工做进程成功建立后才关闭旧的工做进程;
应用程序池也能够先关闭旧的工做进程,而后再建立新的工做进程。
若是Web 应用程序不支持多实例运行,那么你必须配置应用程序池禁止使用重叠回收方式。此配置没法在IIS管理控制台中进行修改,只能经过在 metabase.xml中修改对应应用程序池的DisallowOverlappingRotation metabase属性为true进行。
性能
在性能标签你能够设置工做进程的运行方式:

在空闲此段时间后关闭工做进程(分钟):当工做进程空闲多少分钟后关闭此工做进程,这下降了空闲工做进程对系统资源和CPU性能的消耗,默认启用而且设置为20分钟;
核心请求队列限制为(请求次数):当HTTP.sys接收到某个客户端发送的HTTP请求时,若是处理此请求的对应应用程序池的工做进程还处于忙状态,则HTTP.sys将接收到的请求保存在对应应用程序池的请求队列中,直到工做进程空闲为止。此选项即用于设置此应用程序池的请求队列所能容纳的请求数量,默认状况下每一个应用程序池的请求队列限制为保留1000个请求,若是超出则向客户端返回503错误,你能够根据须要适当进行修改,最大能够设置为65535。可是若是设置太大则会消耗大量的系统资源 ,而设置过小会致使客户端访问时频繁出现503错误。
启用CPU监视:监视此应用程序池的CPU使用率,默认未启用;若是某个应用程序池占用的CPU利用率过多,那么能够经过配置此选项来限制此应用程序池;
最大CPU使用率(百分比):所设置的应用程序池所能使用的最大CPU使用率;启用CPU监视时默认值为100;
刷新CPU使用率(分钟):刷新CPU使用率的间隔时间;启用CPU监视时默认值为5;
CPU使用率超过最大使用率时执行的操做:当此应用程序池的CPU使用率超过所设置的最大CPU使用率时所进行的操做,启用CPU监视时默认为无,此时IIS只是在事件日志中进行记录而不进行其余操做;若是选择为关闭,那么IIS将关闭此应用程序池中的全部工做进程;
Web园:在Web园中你能够配置此应用程序池所使用的最大工做进程数,默认为1,最大能够设置为4000000; 配置使用多个工做进程能够提升该应用程序池处理请求的性能,可是在设置为使用多个工做进程以前,请考虑如下两点:
每个工做进程都会消耗系统资源和CPU占用率;太多的工做进程会致使系统资源和CPU利用率的急剧消耗;
每个工做进程都具备本身的状态数据,若是Web应用程序依赖于工做进程保存状态数据,那么可能不支持使用多个工做进程。
运行情况
在运行情况标签你能够配置应用程序池监视工做进程的运行情况,

启用Ping:默认状况下应用程序池配置为每隔30秒Ping工做进程,当工做进程没有进行响应时,则认为此工做进程出现故障并默认配置为关闭此工做进程。你能够修改Ping的时间间隔,可是太长的Ping间隔可能会致使Web服务的中断,而过短的Ping间隔又会消耗更多的系统资源和CPU利用率,所以建议你保留默认配置;
启用快速失败保护:若是Web应用程序代码编写有问题,它可能会致使工做进程持续出现问题。默认状况下应用程序池配置为启用快速失败保护,当工做进程在配置的时间段(默认为5分钟)内发生的失败次数超过了配置的值(默认为5次),则禁用此应用程序池。
启动时间限制:IIS等待属于此应用程序池的工做进程启动的时间,当工做进程启用时间超出此设置值时,IIS会在事件日志中进行记录;
关闭时间限制:当IIS检测到某个工做进程出现故障时,将此工做进程标记为关闭,此选项指定了IIS等待工做进程自动关闭的时间限制,若是超出此时间限制后工做进程还没有关闭,则IIS强行关闭工做进程。
标识
在标识标签,你能够配置工做进程所运行的用户帐户。在IIS 5或者当IIS 6运行在IIS 5隔离模式时,工做进程运行在本地系统帐户,而运行在工做进程隔离模式下的IIS 6的工做进程运行在网络服务帐户下,这下降了系统被攻击的可能性。
你能够配置工做进程运行在预约义的本地系统、本地服务或网络服务帐户下,也能够配置为使用某个自定义的用户帐户。建议使用默认的网络服务帐户;不过若是为了更高的安全性,能够配置使用自定义的用户帐户,不过建议你只是将此自定义用户加入到IIS_WPG用户组中,所以IIS_WPG用户组包含了能够启动和运行工做进程的最小权限。

1)在任务管理器中增长显示pid字段;2)在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击肯定。而后再次运行就能够了。这样就能够看到pid对应的应用程序池。如上图左侧所示,应用程序池 KefuAppPool和PID=3232的w3wp.exe相关联,应用程序池ReportServer和PID=3572的w3wp.exe相关联。