繁体   English   中英

应用程序池和工作进程线程之间的关系是什么?

[英]What is the relationship between Application Pools and worker process threads?

我正在解决ASP.NET应用程序中的重新启动问题。 该应用程序每天重启大约20次。 我们强烈怀疑应用程序的一部分,因为重新启动是在此特定功能投入生产时开始的。 我使用log4net库为这些页面添加了一些日志记录,但是我在解释日志时遇到了问题。

当ASP.NET应用程序在应用程序池中运行时,是仅运行该应用程序的单个实例,还是运行该应用程序的多个实例? 我知道会产生几个工作进程线程。 工作进程线程与应用程序池中运行的应用程序的关系是什么?

我想如果有多个应用程序记录到同一个日志,我可能无法正确解释结果。 如果一个重新启动但另一个没有重启,那么日志并没有真正告诉我很多关于重启发生时发生的事情。

更新1

查看此页面 ,我找到以下信息:

应用程序池定义一组一个或多个工作进程,这些进程配置有通用设置,这些设置为分配给该应用程序池的一个或多个应用程序提供请求。 由于应用程序池允许一组Web应用程序共享一个或多个类似配置的工作进程,因此它们提供了一种将一组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进程。 在这些进程中创建了多个调试器线程(每个进程一个),使您可以更有效地进行调试。

这听起来像每个应用程序池获得一个w3wp.exe进程。 我能解释那个吗? 如果是这样,这仍然适用于IIS 7.5吗?

是的,每个应用程序池通常是单个进程1 ,但可以包含多个线程。 您可以将多个站点分配给应用程序池,这些站点将在同一进程下运行,但是它们将在不同的“应用程序域”下运行,这些安全上下文将一个站点的代码与另一个站点的代码分开,即使它们是'重新在同一个应用程序池上运行。

两个同时访问该站点的用户可以在不同的线程上运行,这意味着它们可以同时运行。 这意味着任何日志记录都可以散布值。 您可能希望为日志记录添加会话值,以便可以根据会话进行排序。

应用程序池重启(回收)是正常的,一天20次重启似乎并不常见。 它们可以每天发生多次,并且IIS控制何时重新启动应用程序池。 只要感觉需要清理游泳池,它就会这样做。 2您的应用程序应该以这样的方式编写,以便从中优雅地恢复(即,如果应用程序池重新启动,请不要在会话中保留任何无法轻松重新创建的内容)。

当您的应用中发生未处理的异常时,应用池也可以重新启动。 在这种情况下,您想要解决这个原因。 此类异常通常记录在事件日志中。


1 - 虽然您可以将应用程序池配置为具有多个工作进程(这称为Web Garden ),但根据我的经验,这不是典型(通常也不建议)的配置。

2 - 请注意,使用IIS管理器可以配置应用程序以将回收事件记录到Windows事件日志中 您还可以使用IIS管理器设置何时发生多种不同类型的回收事件的阈值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM