文章编号: 821268 - 最后修改: 2009年7月7日 - 修订: 9.0 争用、 性能不佳的情况和死锁时从 ASP.NET 应用程序的 Web 服务请求本页症状要从一个 ASP.NET 调用 XML Web 服务时应用争用,性能不佳的情况和死锁可能会遇到。 客户端可能会报告请求停止响应 (或"挂起"),或要花很长时间才能执行。 如果怀疑死锁,可能就是回收工作进程。 在应用程序事件日志中,您可能会收到以下消息。
“ 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 数。minWorkerThreadsASP.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 每个为每个 AppDomain 的 IP 地址。 因此,在下面的情况下很少的争用时发生请求正在等待连接,和不耗尽 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) Microsoft IIS 支持小组网络日志: http://blogs.msdn.com/webtopics/archive/2009/02/13/asp-net-hang-in-iis-7-0.aspx (http://blogs.msdn.com/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-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和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。 | 文章翻译
|


回到顶端
