说明一下AppPool的概念
IIS6.0之后,有AppPool的概念
默认的Web应用程序,会使用DefaultAppPool
每个不同的AppPool在Server上运作的时候
会使用不同的内存区块,产生各自的实例
并且运作在不同的Session中
预设都会在DefaultAppPool这个区块里面运作
当AppPool停止,或者回收的时候
使用这个AppPool的所有Web应用程序都会同时的被停止、或者回收(ASPX里面的Session会被清空)
而当相同的AppPool里面,如果有某个Web应用程序有问题时(例如发生无穷循环)
相同的AppPool里面的也都会因为执行在同一个Session中
造成其他在这个AppPool的程序也受到影响(例如浏览速度变慢,甚至同时当掉)
在使用上,如果在同一台Server上要运作不同的.NET Framework
那么就一定需要让不同的Framework运作在不同的AppPool里面
至于使用相同的.NET Framework版本的状况下
就可以依照Server的状况来设定
如果每个不同的Web应用程序都设定一个专属的AppPool
这样做当然可以,不过相对的必须使用较多的Server资源
但是这么做却可以让不同的Web应用程序变得比较独立
不会受到其他Web应用程序的不良影响
(
例如要解决Web App1的问题,把DefaultAppPool停掉
→结果造成所有DefaultAppPool的程序全部重新启动
但是如果是独立的WebApp1Pool的话,停掉WebApp1Pool只会让有问题的Web App1重新启动
其他的Web App不会有影响
)
所以...小喵的建议...
如果您的Sever内存够大的话...
不妨让每个WebApp有自己的AppPool
^_^
IIS6.0之后,有AppPool的概念
默认的Web应用程序,会使用DefaultAppPool
每个不同的AppPool在Server上运作的时候
会使用不同的内存区块,产生各自的实例
并且运作在不同的Session中
预设都会在DefaultAppPool这个区块里面运作
当AppPool停止,或者回收的时候
使用这个AppPool的所有Web应用程序都会同时的被停止、或者回收(ASPX里面的Session会被清空)
而当相同的AppPool里面,如果有某个Web应用程序有问题时(例如发生无穷循环)
相同的AppPool里面的也都会因为执行在同一个Session中
造成其他在这个AppPool的程序也受到影响(例如浏览速度变慢,甚至同时当掉)
在使用上,如果在同一台Server上要运作不同的.NET Framework
那么就一定需要让不同的Framework运作在不同的AppPool里面
至于使用相同的.NET Framework版本的状况下
就可以依照Server的状况来设定
如果每个不同的Web应用程序都设定一个专属的AppPool
这样做当然可以,不过相对的必须使用较多的Server资源
但是这么做却可以让不同的Web应用程序变得比较独立
不会受到其他Web应用程序的不良影响
(
例如要解决Web App1的问题,把DefaultAppPool停掉
→结果造成所有DefaultAppPool的程序全部重新启动
但是如果是独立的WebApp1Pool的话,停掉WebApp1Pool只会让有问题的Web App1重新启动
其他的Web App不会有影响
)
所以...小喵的建议...
如果您的Sever内存够大的话...
不妨让每个WebApp有自己的AppPool
^_^
接着就来看一下怎么设定应用程序集区AppPool
(以Windows 2003 Server的IIS6为范例,2008、Vista使用精神差不多,但是设定的画面不太一样)
开启IIS,在应用程序集区右键→新增 →应用程序集区
小喵习惯用现存的来改,这样原本现存的一些设定可以复制过来
建立好AppPool后,接着设定应用程序指定刚刚的AppPool
当有WebApp当掉时,就可以用停止,当抓不到新的class时,就用回收
![]() Microsoft MVP ASP/ASP.NET |
![]() topcat |