gpt4 book ai didi

c# - 如果 .NET 工作进程崩溃,其他用户会怎样?

转载 作者:太空狗 更新时间:2023-10-29 21:20:21 24 4
gpt4 key购买 nike

我对 ASP.Net 工作进程如何处理进程的了解严重不足。我希望那里的一些专家可以填写我。

如果我使用 System.OutOfMemoryException 使工作进程崩溃,那么对于由同一进程提供服务的其他用户来说,用户体验会怎样?他们会得到一个空白屏幕吗? 503错误?

我将尝试与我们实验室的其他人一起测试这个场景,但我想我会把它放在那里。我会更新我们的结果。

更新 : 我们的结果各不相同。如果我们人为地引发 OOM 异常(例如通过将越来越大的 PDF 加载到内存中),该工作进程服务的其他线程将暂时“挂起”然后完成,而其他线程似乎永远不会返回。谢谢你的回复。

最佳答案

W3WP.exe是进程

IIS 在通用工作进程 w3wp.exe 中运行所有 Web 应用程序。无论您是用 ASP.NET、ISAPI 还是其他框架编写,处理 Web 请求的进程都是 w3wp.exe。在 ASP.NET 情况下,w3wp.exe 加载 ASP.NET JIT 编译的 DLL 并通过它们为请求提供服务。在其他情况下,它的工作方式不同。但关键是,w3wp.exe是进程。这种模式始于 IIS6.0,一直延续到 IIS7.0。

意外故障

如果 W3WP.exe 因任何原因意外失败,它正在处理的所有事务都可能会出现 500 个错误(服务器错误)。 IIS 将在其位置启动一个新的工作进程 ( MS calls this "Health Monitoring" ),这意味着 Web 应用程序将继续运行。在失败时没有请求由失败进程提供服务的用户将不会意识到任何这些。

The HTTP 500 error that a client receives in this case will be indistinguishable from a 500 error that the client receives in the case of an application error, let's say an uncaught exception in your ASPNET application code.



对于那些处于失败过程中的请求,没有办法恢复它们。它们将导致浏览器出现 500 个错误。 503 Server Busy 是由于 IIS 由于连接数的阈值而主动拒绝连接的结果。 503 不是由应用程序故障引起的,因此您不应该期望在内存不足和崩溃的情况下看到 503 用于进行中的事务。在负载较重的系统上,您可能会在进程崩溃和重启时看到 503,这是次要的影响。如果这确实是您所看到的,那么您需要更大的安全边际来处理单一错误条件下的负载。

请求队列

IIS has a hand-off approach for requests .当它们到达网络层 (Http.sys) 时,它们被放置在一个队列中,由工作进程接收。任何在 IIS 队列中等待由 WP 处理的请求都将继续不受影响,尽管由于资源争用,它们可能会看到延迟(服务时间)暂时略有增加,因为服务器上运行的进程少了一个。在正确配置的系统上,此队列中的等待时间通常非常短。

当此队列已满时,您将看到 503 错误。

W3WP.exe 自动重启

IIS 有一个自动重启(或“保姆”)工具,通过它 it restarts worker processes after they have exceeded configured thresholds ,例如内存大小、请求数或运行时间。在所有这些情况下,当达到配置的阈值时,IIS 将停止并重新启动工作进程。这些主动重启通常不会导致任何请求中断。当 IIS 决定需要重新启动工作进程时,它会阻止任何新请求到达该待停顿的 WP。 Existing requests are drained :该 WP 中的任何进行中的交易都可以正常完成。当 WP 中的所有请求都完成后,WP 就会终止,IIS 会在其位置启动一个新的请求。然后这个新进程立即开始从调度队列中获取新请求。这对用户或浏览器都是透明的。

我说正常是因为在达到阈值的同时,工作进程可能真的生病了。在这种情况下,w3wp.exe 可能不会在 the configured "quiesce" timeout 内响应 IIS ,因此 IIS 最终必须终止该进程,即使它尚未报告其所有进行中的请求都已完成。这应该是非常罕见的,因为这是两种截然不同的异常(exception)情况,但它确实发生了。在这种情况下,进行中的请求将再次出现 500 个错误。

网络花园

此外 - IIS 允许单个服务器上的多个工作进程。 MS calls this a "web garden" ,来自“网络农场”的文字游戏。如果您设置了一个网络花园,那么由 w3wp.exe 实例而非失败的实例提供的事务将继续不受影响。 “不受影响”假定内存不足错误是局部的,而不是系统范围的问题。

底线

最重要的是,没有什么可以替代您自己的测试。配置选项非常广泛 - 从重启阈值到网络花园等等。此外,故障模式往往非常复杂和多样,无论是内存、超时、太忙等。你会想了解会发生什么。

ps:这个问答真的属于 serverfault.com !!

引用:
http://blogs.iis.net/thomad/archive/2008/05/07/the-iis-process-model-features.aspx

关于c# - 如果 .NET 工作进程崩溃,其他用户会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com