IIS6.0应用程序池回收和工作进程
公司的一个网站程序长时间运行后,速度变慢,重新启动网站后速度明显变快,估计是网站程序占用的内存和CPU资源没能及时释放,才需要每隔一段时间重启网站释放资源。但手工重启总不能算解决问题的方法,怎样才能实现自动管理呢?IIS6.0的应用程序池自动回收功能可以解决这一问题。
应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。
为Web程序配置应用程序池需要以下步骤:1)创建应用程序池,右键单击“应用程序池”,“新建/应用程序池”,命名为KefuAppPool;2)为Web程序指定应用程序池,在网站虚拟目录属性“应用程序设置”里面的“应用程序池(N)”里选择KefuAppPool;3)应用程序池自动回收方式的设置。回收方式有如下几种:
a.根据运行时间
系统默认是1740分钟,也就是29个小时,这个不是很好控制,建议不用。
b.请求数目
这个要看具体的情况了。如果只有10个请求,可是有5个都在请求那个比较占资源的页面(可能是统计年度报表之类),这个时候就会出现进程当掉的情况,如果请求有
1000个可是一个也没运行比较占资源的页面,这个时候进程肯定是很正常的,所以根据请求的数目来决定也不一定符合实际需要。
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相关联.
IIS6 指定回收应用程序池设置
回收应用程序池设置是在应用程序池的属性对话框的“回收”选项卡中指定的。设置回收应用程序池设置
1. 打开IIS 管理控制台,单击加号展开本地计算机。
2. 单击加号展开“应用程序池”文件夹。
3. 右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。
4. 单击“回收”选项卡,然后设置适当的应用程序池设置。
5. 应用程序池“属性”对话框的“回收”选项卡
应用程序池“属性”对话框的“回收”选项卡
内存回收
“内存回收”是等效于memoryLimit ASP.NET 进程模型设置的应用程序池设置。它指定辅助进程可以使用的
最大内存量。如果辅助进程超出了这一数量,将创建新的进程来替换它,并且当前所有请求都被重新分配
给该新进程。在memoryLimit ASP.NET 进程模型设置与“内存回收”应用程序池设
置之间有两个重要的区
别:
·memoryLimit ASP.NET 进程模型设置只使用物理内存。“内存回收”应用程序池设置允许您为物理 内存和虚拟内存分别指定限制。由于公共语言运行库的垃圾回收器工作的方式,物理内存(或物理内存和
虚拟内存的组合)常用于ASP.NET 应用程序。虚拟内存常用于将堆划分为多个片断的传统本机应用程序。
·“内存回收”应用程序池设置是按兆字节(MB) 指定的,而不是按相对于总内存的百分比指定的。 回收辅助进程
“回收辅助进程”是等效于requestLimit ASP.NET 进程模型设置的应用程序池设置。它指定导致辅助进程或
应用程序池被回收的请求的数目。默认情况下“回收辅助进程”是禁用的。若要启用“回收辅助进程”,请选取
该复选框并在数值调节框中指定请求数。
回收多个辅助进程
“回收多个辅助进程”是等效于 timeout ASP.NET 进程模型设置的应用程序池设置。它指定回收辅助进程或
应用程序池的时间间隔。默认情况下“回收多个辅助进程”是启用的而且设置为120 分钟。通过更改数值调
节框中的值,可以指定一个不同的时间间隔。若要禁用“回收多个辅助进程”,请清除该复选框。 性能应用程序池设置
通过性能应用程序池设置,可以控制辅助进程的操作。以下几节描述如何指定性能应用程序池设置。 指定性能应__________用程序池设置
性能应用程序池设置是在应用程序池的属性对话框的“性能”选项卡中指定的。
设置性能应用程序池设置
1. 打开IIS 管理控制台,单击加号展开本地计算机。
2. 单击加号展开“应用程序池”文件夹。
3. 右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。
4. 单击“性能”选项卡,然后设置适当的应用程序池设置。
应用程序池“属性”对话框的“性能”选项卡
网络园
“网络园”是等效于webGarden 和cpuMask ASP.NET 进程模型设置的应用程序池设置。若要启用“网络园”,
请将“辅助进程的最大数目”设置为高于1 的值。该值还为应用程序池确定最大进程数。
因为网络园支持使用多个进程,所以,每一进程在应用程序状态、进程内会话状态、缓存和静态数据
方面
都有其自己的副本。网络园不应用于所有应用程序,尤其在这些应用程序需要维护状态的情况下。在决定
网络园模式是否适用前,一定要检查应用程序的性能。
在使用网络园时,理解会话状态和循环工作的方式是十分重要的。考虑其他应用程序池设置影响应用程序
的方式也是十分重要的。
使用辅助进程隔离模式的网络园中的会话状态
在使用会话状态时,请注意,辅助进程隔离模式不支持将请求传送回引起请求返回的进程。当一个应用程
序运行在处于ASP 会话状态或应用程序状态的网络园中时,该应用程序需要将其请求发送回发起的进程。
在使用IIS 6.0 应用程序池时,要确保应用程序让一个连接总保持为打开状态,以便其请求被发送回适当的
进程。如果此连接没有保持为打开状态,则请求将被发送到为网络园提供服务的下一可用的辅助进程。 使用辅助进程隔离模式的网络园中的循环
循环是一种用于应用程序的负载平衡方法。在每个请求到达时,它会自动被发送到下一可用进程。例如,
如果网络园具有4 个进程,则请求被发送到进程 0、1、2 和 3,并依照这一顺序发送。然后为其他请求重
复该循环。
使用辅助进程隔离模式的网络园中的应用程序池参数
应用程序池设置 行为
AppPoolQueueLength
此参数的值不受影响。但是,请求是通过在所有为网络园提供服务的辅助进程上循环而分
发的。
DisallowOverlappingRotation 网络园中没有行为更改。
DisallowRotationOnConfigChange 网络园中没有行为更改。
IdleTimeout
为每一进程独立计算,这样各进程的超时可以彼此独立。根据所选择的路由算法,将自动
配置要加载的进程的数目。
LoadBalancerCapabilities 网络园中没有行为更改。
OrphanAction 网络园中没有行为更改。
OrphanWorkerProcess 网络园中没有行为更改。
PeriodicRestartTime
此参数的含义在网络园中发生了变化。在网络园中,此参数指定回收所有进程的时间间隔。
进程在指定时间长度内以平均的时间间隔轮流回收。例如,如果网络园具有四个进程并且
PeriodicRestartTime 被设置为20 小时,则在5 小时后回收第一个进程,在10 小时
后回收第二个进程,依此类推。
注意如果进程崩溃,则向替代进程提供PeriodicRestartTime 的运行时值。这使得崩溃
的进程可以在指定的PeriodicRestartTime 内与其他进程一起回收。
PeriodicRestartRequests
此参数的含义在网络园中发生了变化。在网络园中,此参数指定在达到某一请求数目后回
收所有进程。进程在指定的请求数目内按平均时间间隔轮流回收。例如,如果网络园具有
四个进程并且PeriodicRestartRequests 设置为40,000 个请求,则第在10,000 个请
求后回收一个进程,在20,000 个请求后回收第二个进程,依此类推。在回收了第一组进
程后,将向下一组进程指派40,000 这一PeriodicRestartRequests 值。
PeriodicRestartSchedule
网络园中没有行为更改。如果管理员决定使用基于时间表的回收,则同时回收所有网络园
进程。
PingInterval 网络园中没有行为更改。
PingResponseTime 网络园中没有行为更改。
PingingEnabled 网络园中没有行为更改。
RapidFailProtection
网络园中没有行为更改。例如,在一段时间间隔内计算整个网络园的失败总数然后进行比
较。这提供了额外的恢复能力。
RapidFailProtectionInterval
网络园中没有行为更改。例如,在一段时间间隔内计算整个网络园的失败总数然后进行比
较。这提供了额外的恢复能力。
RapidFailProtectionMaxCrashes
网络园中没有行为更改。例如,在一段时间间隔内计算整个网络园的失败总数然后进行比
较。这提供了额外的恢复能力。
SMPAffinitized 网络园中没有行为更改。
SMPProcessorAffinityMask
在IIS 5.0 隔离模式中,您只能具有与CPU 的数目一样多的辅助进程。在辅助进程隔离
模式中,多个CPU 可用于单个辅助进程。
ShutdownTimeLimit 网络园中没有行为更改。
StartupTimeLimit 网络园中没有行为更改。
某些应用程序池设置具有特定于网络园的行为。下表总结了这些行为
空闲超时
“空闲超时”是等效于idleTimeout ASP.NET 进程模型设置的应用程序池设置。它指定辅助进程或应用程序
池在开始处于不活动状态后,过多长时间将其关闭。默认情况“空闲超时”是启用的而且设置为20 分钟。通
过更改数值调节框中的值,可以指定一个不同的时间限制。若要禁用“空闲超时”,请清除该复选框。 请求队列限制
“请求队列限制”是等效于restartQueueLimit ASP.NET 进程模型设置的应用程序池设置。它指定在异常终
止后等待辅助进程启动时在ASP.NET ISAPI 中排队的请求的最大数目。默认情况下“请求队列限制”是启用
的而且设置为1000 个请求。通过更改数值调节框中的值,可以对排队的请求的数目指定不同的限制。若
要禁用“请求队列限制”,请清除该复选框。
健全应用程序池设置
通过健全应用程序池设置,您可以控制为获得正确功能而监视辅助进程的方式。以下几节描述如何指定健
全应用程序池设置。
指定健全应用程序池设置
这些回收应用程序池设置是在应用程序池的属性对话框的“健全”选项卡中指定的。
设置健全应用程序池设置
1. 打开IIS 管理控制台,单击加号展开本地计算机。
2. 单击加号展开“应用程序池”文件夹。
3. 右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。
4. 单击“健全”选项卡,然后设置适当的应用程序池设置。
5. 应用程序池“属性”对话框的“健全”选项卡
应用程序池“属性”对话框的“健全”选项卡
启用 Ping
“启用ping”是等效于pingFrequency ASP.NET 进程模型设置的应用程序池设置。它指
定ASP.NET ISAPI 检查辅助进程是否存在的时间间隔。如果没有辅助进程,则重新启动辅助进程。默认情
况下“启用ping”是启用的而且设置为30 秒。通过更改数值调节框中的值,可以指定一个不同的时间间隔。
若要禁用ping 操作,请清除“启用ping”复选框。
关闭时间限制
“关闭时间限制”是等效于shutDownTimeout ASP.NET 进程模型设置的应用程序
池设置。它指定提供给辅
助进程的用来正常关闭的时间长度。如果辅助进程在指定的时间长度内没有关闭,则ASP.NET ISAPI 将结
束该辅助进程。默认情况下“关闭时间限制”设置为90 秒。通过更改数值调节框中的值,可以指定一个不同
的时间限制。
标识应用程序池设置
通过标识应用程序池设置,可以指定辅助进程使用的帐户。默认情况下,辅助进程使用“网络服 务”(Network Service) 帐户。不过,您可以重写此帐户并指定其他的Windows 标识。以下几节描述如何指
定标识应用程序池设置。
指定标识应用程序池设置
这些回收应用程序池设置是在应用程序池的属性对话框的“标识”选项卡中指定的。
设置标识应用程序池设置
1. 打开IIS 管理控制台,单击加号展开本地计算机。
2. 单击加号展开“应用程序池”文件夹。
3. 右击适当的应用程序池,然后单击“属性”。出现应用程序池的属性对话框。
4. 单击“标识”选项卡,然后设置适当的应用程序池设置。
5. 应用程序池“属性”对话框的“标识”选项卡
应用程序池“属性”对话框的“标识”选项卡
用户名和密码
“用户名”和“密码”分别是等效于username 和password ASP.NET 进程模型设置的应用程序池设置。这两
种设置结合使用来使辅助进程使用指定的Windows 标识运行。默认情况下,辅助进程使用“网络服 务”(Network Service) 帐户。但是,如果选择了“可配置”单选按钮并且“用户名”和“密码”文本框包含有效值,
则辅助进程将使用指定的Windows 标识。此外,必须将Windows 标识添加到IIS_WPG 用户组。 将 Windows 标识添加到IIS_WPG 用户组
1. 在“开始”菜单上,右击“我的电脑”,然后单击“管理”。
2. 通过右击加号展开“本地用户和组”节点。
3. 单击“组”文件夹。在右窗格中将列出在该计算机上定义的所有组的列表。
4. 右击“IIS_WPG”,然后单击“添加到组”。
5. 单击“添加”按钮并输入要用于辅助进程的帐户
__
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务