加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:09:32 所属栏目:asp.Net 来源:网络整理
导读:我正在解决ASP.NET应用程序中的重新启动问题.该应用程序每天重启大约20次.我们强烈怀疑应用程序的一部分,因为重新启动时此特定功能何时投入生产.我使用log4net库为这些页面添加了一些日志记录,但是我在解释日志时遇到了问题. 当ASP.NET应用程序在应用程序池
我正在解决ASP.NET应用程序中的重新启动问题.该应用程序每天重启大约20次.我们强烈怀疑应用程序的一部分,因为重新启动时此特定功能何时投入生产.我使用log4net库为这些页面添加了一些日志记录,但是我在解释日志时遇到了问题.

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

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

更新1

查看this page,我找到以下信息:

An application pool defines a group of one or more worker processes,configured with common settings that serve requests to one or more applications that are assigned to that application pool. Because application pools allow a set of Web applications to share one or more similarly configured worker processes,they provide a convenient way to isolate a set of Web applications from other Web applications on the server computer. Process boundaries separate each worker process; therefore,application problems in one application pool do not affect Web sites or applications in other application pools.

但我仍然感到困惑.我从经验中知道,我可以分配两个完全不同的应用程序来使用相同的应用程序池.这是否意味着将产生两个工作进程?或者可以为第一个应用程序生成多个工作进程,并为第二个应用程序生成多个工作进程?如果在一个工作进程中发生问题,是否可以删除该应用程序池中运行的每个应用程序?

更新2

从this page about using WinDbg开始,我发现了这个信息(强调我的):

In IIS 5.x,there is only one Aspnet_wp.exe worker process and one debugger thread. Consequently,only one debugger can be attached to the Aspnet_wp.exe process at a time. This can pose a problem if you’re dealing with multiple Web applications on the same machine. In IIS 6.0,you can coerce an AppDomain to run in a separate application pool. (For more information,see “IIS 5.x Process Model” and “IIS 6.0 Process Model” in Chapter 1.) Separate application pools provide multiple W3wp.exe processes. Multiple debugger threads are created in these processes (one in each),allowing you to debug more efficiently.

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

解决方法

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

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

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

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

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

2 – 请注意,使用IIS管理器可以将应用程序配置为log recycle events to the Windows Event Log.您还可以使用IIS管理器设置发生多种不同类型的回收事件的阈值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读