我正在对 ASP.NET 应用程序中的重新启动进行故障排除。该应用程序每天重新启动大约 20 次。我们强烈怀疑应用程序的一部分,因为当这个特定功能投入生产时,重新启动就开始了。我已经使用 log4net 库向这些页面添加了一些日志记录,但是我在解释日志时遇到了麻烦。
当 ASP.NET 应用程序在应用程序池中运行时,是只运行该应用程序的一个实例,还是运行该应用程序的多个实例?我知道会产生几个工作进程线程。工作进程线程与应用程序池中运行的应用程序有什么关系?
我想如果有多个应用程序记录到同一个日志,我可能无法正确解释结果。如果一个重新启动但另一个没有,则日志并不能真正告诉我重启发生时发生的事情。
更新 1
查看此页面,我发现以下信息:
应用程序池定义一组一个或多个工作进程,并配置有向分配给该应用程序池的一个或多个应用程序提供请求的通用设置。因为应用程序池允许一组 Web 应用程序共享一个或多个类似配置的工作进程,所以它们提供了一种方便的方法来将一组 Web 应用程序与服务器计算机上的其他 Web 应用程序隔离开来。进程边界将每个工作进程分开;因此,一个应用程序池中的应用程序问题不会影响其他应用程序池中的网站或应用程序。
但我仍然很困惑。我从经验中知道,我可以分配两个完全不同的应用程序来使用同一个应用程序池。这是否意味着将产生两个工作进程?或者是否可以为第一个应用程序生成多个工作进程,并为第二个应用程序生成多个工作进程?如果一个工作进程发生问题,它能否关闭该应用程序池中运行的每个应用程序?
更新 2
从这个关于使用 WinDbg 的页面,我找到了这个信息(强调我的):
在 IIS 5.x 中,只有一个 Aspnet_wp.exe 工作进程和一个调试器线程。因此,一次只能将一个调试器附加到 Aspnet_wp.exe 进程。如果您在同一台机器上处理多个 Web 应用程序,这可能会造成问题。在 IIS 6.0 中,您可以强制 AppDomain 在单独的应用程序池中运行。(有关详细信息,请参阅第 1 章中的“IIS 5.x 进程模型”和“IIS 6.0 进程模型”。)单独的应用程序池提供多个 W3wp.exe 进程。在这些进程中创建了多个调试器线程(每个线程一个),使您能够更有效地进行调试。
在我看来,这听起来就像每个 App Pool 都有一个w3wp.exe
进程。我解释对了吗?如果是这样,那是否仍然适用于 IIS 7.5?