IIS系列:三、管理应用程序池
简介:本文介绍如何创建应用程序池以及如何修改应用程序池配置。
管理应用程序池:
1、右键点击应用程序池,选择“添加应用程序池“;
2、输入应用程序池名称,选择支持的.Net版本,V2.0支持.Net Framework 2.0、3.0、3.5,V4.0支持.Net Framework 4.0(需要在系统上先安装.Net Framework 4.0),No Managed Code不支持.Net Framework,这里选择最新版本的V4.0,托管管道模式是从IIS7和IIS8引进的控制请求方法,可以使ASP.NET程序的访问比IIS6更加快速;
3、将默认站点移动到新建的应用程序池;
4、使用应用程序池主要有以下几点考虑:
1)把不同的应用隔离开,应用之间互不影响,一个程序挂了不会影响其他应用程序池应用的使用;
2)把不同应用隔离开,可以限制一个应用访问另外一个应用的资源,比较安全,例如一台服务器上部署了多个网站,有的是公开(匿名认证)的网站,而有的网站需要经过身份验证后才可以登录,就需要限制登录公开网站的用户直接访问另外一个网站的内容;
3)可以把相同配置、相同使用场景的应用放在一个程序池中,这样可以方便管理;
应用程序池有一个”回收“的功能,应用程序池运行期间会有一个w3wp.exe的进程(服务器空闲20分钟会自动关闭该进程,在下一次新的请求到达时重启开启进程),回收指的是回收这个进程,即释放内存,重新以干净的状态运行应用程序池。
IIS Worker Process接收来自客户端的请求并将服务器响应的结果返回给客户端。
5、当应用程序池出现故障时,可以通过回收应用程序池解决,不需要重启服务器,这样不会影响其他应用程序的正常使用;
6、在回收的过程,为了不中断新的连接请求,会在旧的w3wp.exe进程结束前开启一个新的w3wp.exe进程,回收过程可以看到两个w3wp.exe进程。在回收过程中,可能会导致用户会话状态信息丢失。有的应用程序设计时已经考虑了进程的回收,可以保持会话相关的信息,回收过程用户无感知。
7、选择”正在回收“按钮,可以修改默认的回收设置;
8、默认是1740分钟(29小时)回收一次,也可以设置达到固定请求数量后回收、在指定的时间点回收、基于内存最大量的回收;
9、设置回收事件日志,这里的设置是基于回收条件设置的,回收条件设置了固定时间,这里只能配置固定时间间隔的回收事件,回收事件勾选”按需、“配置更改”、“非正常状态的ISAPI“;(程序员可能会使用Internet Server Application Programming Interface ,这样IIS可以监控应用程序的健康性,应用程序出现故障时可以自动请求回收)
10、在事件查看器中筛选来源为WAS(Windows Active Process Service)的系统日志;
11、手动回收应用程序池,可以在系统日志中看到回收事件;
使用Powershell管理应用程序池:
12、使用Powershell查看默认应用程序池;
13、创建新的应用程序池;
14、查看应用程序池的属性信息;
15、将默认网站移动到新的应用程序池;
16、查看w3wp.exe进程,回收过程可以看到两个进程(ProcessID不同);
Get-WmiObject win32_process -filter "name='w3wp.exe'" | Select-Object Name, ProcessId, @{n='AppPool';e={$_.GetOwner().user}}
17、查看和设置回收;
-
Get-ItemProperty -Path IIS:\AppPools\DefaultAppPool –Name recycling.periodicRestart.time
-
-
Set-ItemProperty - Path IIS:\AppPools\DefaultAppPool - Name recycling.periodicRestart.time - Value 3.00: 00: 00
-
-
Get-ItemProperty - Path IIS:\AppPools\DefaultAppPool - Name recycling.PeriodicRestart.schedule.collection
-
-
Clear-ItemProperty - Path IIS:\AppPools\DefaultAppPool - Name recycling.PeriodicRestart.schedule.collection
-
-
Set-ItemProperty - Path IIS:\AppPools\DefaultAppPool - Name recycling.PeriodicRestart.schedule.collection - Value @{ value= '06:00:00'}