争用、 性能下降和死锁进行 Web 服务请求从 ASP.NET 应用程序时
本页症状 进行从 ASP.NET 应用程序, 调用 XMLWeb 服务时可能会遇到争用、 性能下降和死锁。 客户可能报告请求停止响应 (或 " 挂起 ") 或需要很长时间来执行。 如果怀疑死, 可能回收辅助进程。 应用程序事件日志中可能会收到以下消息。
?System.InvalidOperationException 有是没有足够的空闲线程 ThreadPool 对象以完成 operation.? 中:
还可能在浏览器收到以下异常错误信息:
请求定时 out.? ?HttpException (0 x 80004005):
注意 本文还适用于应用程序直接使 HttpWebRequest 请求。原因 因为 ASP.NET 的辅助线程和完成端口线程, 调用可用于执行请求数限制可能发生此问题。
对 Web 服务调用通常, 使用一个辅助线程来执行代码发送请求和一个完成端口线程以从 Web 服务接收回调。 但是, 如果请求重定向或需要验证, 调用可能使用多达两辅助和两完成端口线程。 同时发生多个 Web 服务调用时, 因此您可消耗托管 ThreadPool。 例如, 假设 ThreadPool 仅限于 maxworkerthreads, 10, 并且当前执行所有 10 工作线程正在等待回调来执行代码。 由于工作项排队以 ThreadPool 阻塞线程可用之前可从不执行回调。 其他潜在源争夺是 maxconnection 参数, System.Net 命名空间用于限制的连接数。 此限制通常, 按预期工作。 但是, 如果许多应用程序尝试使许多请求到单个 IP 地址同时, 线程可能需要等待一个可用连接。 解决方案 Machine.config 文件以最适合您情况中要解决这些问题, 可调整以下参数:
maxWorkerThreads 和 maxIoThreadsASP.NET 使用以下两配置设置来限制辅助线程和完成线程所使用的最大数量: maxWorkerThreads 参数和 maxIoThreads 参数是可隐式乘以的 CPU 数。 例如, 如果有两个处理器, 的工作线程数是:
2 * maxWorkerThreads minFreeThreads 和 minLocalRequestFreeThreadsASP.NET 还包含以下配置设置决定多少辅助线程和完成端口线程必须可用于启动远程请求或本地请求: 如果还有, 不够线程请求是排队直到足够线程可以自由地发出请求。 ASP.NET, 因此不在同一时间执行超过下列数量的请求:
(* minFreeThreads maxWorkerThreads ) - 的 CPU 数 注意 : minFreeThreads 参数和 minLocalRequestFreeThreads 参数是不隐性乘以的 CPU 数。minWorkerThreads存为 ASP.NET 1.0 Service Pack 3 以及 ASP.NET 1.1, ASP.NET 还包含以下配置设置决定了多少工作线程可能可立即向远程请求服务。 以多快速度比从 CLR 默认优化 " 线程 " 功能创建辅助线程创建由该设置控制线程。 此设置允许 ASP.NET 对服务请求, 可能是突然填充 ASP.NET 请求队列由于以 slow-down 在后端服务器, 突然暴发来自客户端, 或类似的请求会导致突然高度以多种请求队列中。 对于 minWorkerThreads 参数默认值为 1。 我们建议您将对 minWorkerThreads 参数值设置为以下值。
默认情况下, minWorkerThreads 参数是 Web.config 文件或 Machine.config 文件中不存在。 此设置隐性乘以的 CPU 数。
maxconnectionmaxconnection 参数确定如何多连接可对特定 IP 地址。 参数显示如下: 对于本文中前面讨论参数设置为所有在进程级。 但是, maxconnection 参数设置适用于 AppDomain 级别。 默认, 因为此设置适用于 AppDomain 级别, 最多两个连接创建到特定 IP 地址从每个 AppDomain 过程中您。
executionTimeoutASP.NET 使用以下配置设置来限制请求执行时间:也可以通过 Server.ScriptTimeout 属性设置此限制。注意 如果您增加 executionTimeout 参数, 值可能还需要修改 processModel responseDeadlockInterval 参数设置。 建议本节中推荐设置对所有应用程序可能无法工作。 但是, 以下附加信息可以帮助您进行适当调整。如果进行一个 Web 服务调用到单个 IP 地址从每个 ASPX 页面, Microsoft 建议您使用下列配置设置:
注意使用此配置时, 因为您可以同时执行最多 12 ASP.NET 请求每 CPU = 12 100 - 88。 因此, 至少 88 N 辅助线程和 88 N 完成端口线程可对其他使用 (例如用于 Web 服务回调) * *。 例如, 有服务器与四处理器和 hyperthreading 启用。 对于本文中提及配置设置基于这些公式, 将使用下列值。 还, 使用此配置, 时 12 连接可用每个 CPU 按 IP 地址对于每个 AppDomain。 因此, 在下列情况下, 几乎争夺当请求正在等待连接, 并且不耗尽 ThreadPool:
状态 此行为是设计使然。
参考 有关详细信息, 请访问 Microsoft Developer Network (MSDN) Web 站点:
http://msdn2.microsoft.com/en-us/library/ms998549.aspx (http://msdn2.microsoft.com/en-us/library/ms998549.aspx)
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。如果您发现了错误并希望帮助我们提高机器翻译技术,请完成文章末尾的在线调查。点击这里察看该文章的英文版: 821268 (http://support.microsoft.com/kb/821268/en-us/) Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。 | 文章翻译
|


回到顶端
