![]() |
1
9
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应用将继续运行。在失败时没有请求被失败进程服务的用户将不会意识到这一点。
对于那些在失败过程中的请求,没有办法恢复它们。它们将导致浏览器出现500个错误。503服务器忙是由于IIS由于连接数的阈值而主动拒绝连接的结果。503不是应用程序失败的结果,因此您不应该期望在内存不足和崩溃情况下看到503是飞行事务。在重负载系统上,您可能会看到503,因为进程崩溃和重新启动是次要的影响。如果这真的是你看到的,你需要一个更大的安全边际来处理单一错误条件下的负载。 请求队列IIS has a hand-off approach for requests . 当它们到达网络层(http.sys)时,它们被放置在一个队列中,由一个工作进程接收。在IIS队列中等待由wp处理的任何请求将继续不受影响,尽管由于资源争用,它们可能会看到延迟(服务时间)略有临时增加,因为服务器上正在运行的进程减少了一个。在配置正确的系统上,此队列中的等待时间通常非常短。 当此队列已满时,您将看到503个错误。 自动重新启动w3wp.exeiis有一个自动重启(或“保姆”)设施,通过它 it restarts worker processes after they have exceeded configured thresholds ,例如内存大小、请求数或运行时间。在所有这些情况下,当达到配置的阈值时,IIS将停止并重新启动工作进程。这些主动重启 正常地 不要导致任何请求中断。当iis决定需要重新启动工作进程时,它会阻止任何新请求到达该工作进程以使wp静止。 Existing requests are drained :允许该工作包中的任何飞行中事务正常完成。当wp中的所有请求完成时,wp将终止,iis将在其位置启动一个新的请求。然后,这个新流程立即开始从调度队列中提取新请求。这对用户或浏览器都是透明的。 我说 正常地 因为在达到阈值的同时,工作进程可能已经真正生病了。在这种情况下,w3wp.exe可能在 the configured "quiesce" timeout ,因此,即使iis尚未报告其所有在飞请求都已完成,它也必须最终终止该进程。这应该是非常罕见的,因为这是两个截然不同的例外情况,但它确实发生了。在这种情况下,飞行中的请求将再次得到500个错误。 网络花园同时-IIS允许在一台服务器上有多个工作进程。 MS calls this a "web garden" 一部关于“网络农场”的剧本。如果设置了Web Garden,则由W3wp.exe实例(而不是失败的实例)提供服务的事务将继续不受影响。”“未受影响”假设内存不足错误是本地化的,而不是系统范围的问题。 底线归根结底,没有什么可以替代你自己的测试。配置选项非常广泛——从重启阈值到web花园等等。此外,无论是内存、超时、太忙等等,故障模式往往都相当复杂和多变。你会想知道会发生什么。 PS:这个问答真的属于serverfault.com!!
参考文献:
|
![]() |
2
0
将启动一个新的工作线程,用户将不知道发生了什么。除非它通过快速故障完全关闭( http://technet.microsoft.com/en-us/library/cc779127(WS.10).aspx ) |
![]() |
3
0
如果是内存不足的情况,IIS通常只回收应用程序池。 |
![]() |
4
0
正如其他答案所说,在大多数情况下,一切都只是重新启动,而当时没有挂起请求的大多数用户只会注意到一个延迟。 但是,如果应用程序将会话变量与in-proc会话状态一起使用,则当应用程序池重新启动时,所有用户的所有会话变量都将丢失。这可能会或可能不会对用户产生负面影响,这取决于您对会话变量所做的操作。可以通过切换到StateServer或SQL Server会话存储来避免此问题。 |
![]() |
CalculusLover · 在本例中,fork()是如何工作的? 3 年前 |
![]() |
jjmerelo · 使用Proc::Async从绑定管道读取 7 年前 |
![]() |
jatinBatra · 编译后生成的二进制文件会发生什么情况[关闭] 7 年前 |
![]() |
Jacobo · 从Java调用具有输入和输出重定向的C可执行文件 7 年前 |
![]() |
Ran · 每当我尝试执行命令行提示符时,Unity就会阻塞 7 年前 |
![]() |
Hatshepsut · 使用命令行参数使用region调用子流程 7 年前 |