文章编号: 821268 - 最后修改: 2009年7月28日 - 修订: 11.0 争用、 较差的性能和死锁时使 ASP.NET 应用程序从 Web 服务请求本页症状当您进行调用 XML Web 服务从一个 ASP.NET 应用您可能会遇到争用、 较差的性能和死锁。 客户端可能会报告请求停止响应 (或"挂起"),或执行一个很长时间。 如果怀疑死锁,可能回收工作进程。 应用程序事件日志中,您可能会收到以下消息。
“ System.InvalidOperationException: ThreadPool 对象来完成该操作中未有足够的自由线程 ” “ HttpException (0x80004005): 请求超时 ” 原因因为 ASP.NET 限制的辅助线程和调用可以使用来执行请求的完成端口线程数,则可能会出现此问题。 通常,调用 Web 服务使用一个工作线程来执行该代码将请求发送和接收回调从 Web 服务的一个完成端口线程。 但是,如果请求重定向或要求身份验证,呼叫可能使用多达两个工作和两个完成端口线程。 因此,您可以在多个 Web 服务调用发生在同一时间时耗尽托管的 ThreadPool。 渚嬪假设该 ThreadPool 限于 10 的辅助线程,并且所有 10 个工作线程正在执行等待执行回调的代码。 因为排队到该 ThreadPool 任何工作项将被阻止,直到某个线程变为可用,可以永远不会执行回调。 争用的另一个潜在的源是 maxconnection 参数 System.Net 命名空间用来限制连接数。 通常,按预期方式工作此限制。 但是,如果许多应用程序试图同时对单个 IP 地址进行许多请求,线程可能必须等待可用连接。 解决方案若要瑕佽 в 鍐宠繖浜涢棶棰橈,可以以最适合您的具体情况 Machine.config 文件中调整以下参数:
maxWorkerThreads 和 maxIoThreadsASP.NET 使用以下两个配置设置来限制最大的工作线程和使用的完成线程数:2 * maxWorkerThreads minFreeThreads 和 minLocalRequestFreeThreadsASP.NET 还包含以下确定多少工作线程和完成端口线程必须可用于启动远程请求或本地请求的配置设置:(maxWorkerThreads * number of CPUs)-minFreeThreads 注意minFreeThreads 参数和 minLocalRequestFreeThreads 参数不隐式相乘的 cpu 数量。minWorkerThreads作为 ASP.NET 1.0 Service Pack 3 和 ASP.NET 1.1 的 ASP.NET 还包含以下确定多少工作线程可能会进行可立即用于远程请求提供服务的配置设置。maxconnectionmaxconnection 参数确定多少能连接到特定的 IP 地址。 参数如下显示:executionTimeoutASP.NET 使用以下配置设置将限制请求执行时间:注意 如果增加 executionTimeout 参数的值,您可能还具有修改 processModel responseDeadlockInterval 参数的设置。 建议此节中推荐的设置可能无法工作的所有应用程序。 但是,以下附加信息可能帮助您进行适当的调整。如果建立的一个 Web 服务调用单个 IP 地址从每个 ASPX 页 Microsoft 建议使用以下配置设置:
注意 当您使用此配置时,您可以执行 12 ASP.NET 请求,每个 CPU 的最大同时因为 100 88 = 12。 因此,至少 88 * N 辅助线程和 88 * N 完成端口线程是可用的其他使用 (如 Web 服务回调所为)。 渚嬪有四个处理器和启用超线程服务器。 基于这些公式,您将在本文中提到的配置设置为使用下列值。 此外时使用此配置,12 连接都是每个 CPU 每个 IP 地址为每个 AppDomain 可用的。 因此,在以下情形中很少的争用发生请求正在等待连接,并在 ThreadPool 未用完时:
状态此行为是设计使然。 更多信息如果您遇到较差的性能和 asp.net 的 IIS 7.0 上争用,请参阅下面的 Microsoft 博客: IIS 7.0 和 6.0 上的 ASP.NET 线程用法 http://blogs.msdn.com/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx
(http://blogs.msdn.com/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx)
在 IIS 7.0 中的 ASP.net 挂起http://blogs.msdn.com/webtopics/archive/2009/02/13/asp-net-hang-in-iis-7-0.aspx
(http://blogs.msdn.com/webtopics/archive/2009/02/13/asp-net-hang-in-iis-7-0.aspx)
参考有关详细信息请访问下面的 Microsoft 开发网络 (MSDN) 的网站: 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和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。 | 文章翻译
|

回到顶端
