我们的一台生产服务器(Windows 2003 服务器)出现了问题。似乎所有应用程序池每 10 秒左右回收一次(同时回收)。不用说,这会对应用程序的性能产生负面影响。
症状:
- 应用程序缓存丢失
- 应用程序启动代码中的调试语句正在触发
- 后台线程停止
我还发现了其他一些事情:
- 令人惊讶的是,w3wp.exe 进程保持稳定
- 该机器上没有运行防病毒软件
- 尝试通过向其中一个应用程序添加<httpRuntime waitChangeNotification="1000000" />
和<compilation numRecompilesBeforeAppRestart="100000" />
来禁用文件更改通知,但没有帮助
- 事件查看器中没有任何可疑内容
不确定这里还能尝试什么。
答案1
您需要启用 IIS 健康监控日志记录。它会在应用程序事件日志中记录重启的原因。您不应禁用文件更改通知,因为网站中根本不应该有任何变化。任何创建/修改/删除的文件/数据都应位于网站文件夹结构之外。
现在此功能已内置于 IIS 7 中的应用程序池 GUI 中。要在 IIS 6 中启用此功能,您可以将相关信息添加到 web.config。您特别想记录“应用程序生命周期事件”。
<system.web>
<healthMonitoring enabled="true" heartbeatInterval="1">
<rules>
<add name="HeartBeat" eventName="Heartbeats" provider="EventLogProvider" profile="Default" minInstances="1" minInterval="00:01:00" maxLimit="Infinite"/>
<add name="App Lifetime" eventName="Application Lifetime Events" provider="EventLogProvider" profile="Default" minInstances="1" minInterval="00:00:00" maxLimit="Infinite"/>
</rules>
</healthMonitoring>
<system.web>
使用健康监测事件
http://msdn.microsoft.com/en-us/library/ms228103.aspx
答案2
您是否具有暂时拒绝对 bin 文件夹进行写入访问的必要权限?如果您这样做,则当有内容正在写入文件夹时,可能会出现错误,您可以从那里进行追踪。
最坏的情况是如果没有错误那么至少你的应用程序池不会被回收因为 bin 文件夹不会改变。
另一种方法是使用进程监控来自 Microsoft 并查看文件夹以查看正在发生的访问。这将向您显示已读取/写入的文件以及访问它的任何进程。