争用、 性能下降和死锁进行 Web 服务请求 ASP.NET 应用程序优化

 原文链接: http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B821268
注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。
文章编号:821268
最后修改:2005年8月29日
修订:6.0
<script type="text/javascript"> var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'"; var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif"; var depthLimit = 10; var depth3Limit = 10; var depth4Limit = 5; var depth5Limit = 3; var tocEntryMinimum = 1; </script> <script src="/common/script/gsfx/kbtoc.js??4" type="text/javascript"></script>

症状

<script type="text/javascript">loadTOCNode(1, 'symptoms');</script>
进行从 ASP.NET 应用程序, 调用 XMLWeb 服务时可能会遇到争用、 性能下降和死锁。 客户可能报告请求停止响应 (或 " 挂起 ") 或需要很长时间来执行。 如果怀疑死, 可能回收辅助进程。 应用程序事件日志中可能会收到以下消息。
如果您使用 MicrosoftInternet 信息服务 (IIS) 5.0, 会应用程序事件日志中您收到以下消息:

 

   Event Type:     Error
   Event Source:   ASP.NET 1.0.3705.0
   Event Category: None
   Event ID:       1003
   Date:           5/4/2003
   Time:           6:18:23 PM
   User:           N/A
   Computer:       <ComputerName>
   Description:
      aspnet_wp.exe  (PID: <xxx>) was recycled because it was suspected to be in a deadlocked state.
      It did not send any responses for pending requests in the last 180 seconds.

 

如果您使用 IIS 6.0, 会应用程序事件日志中您收到以下消息:

 

   Event Type:     Warning
   Event Source:   W3SVC-WP
   Event Category: None
   Event ID:       2262
   Date:           5/4/2003
   Time:           1:02:33 PM
   User:           N/A
   Computer:       <ComputerName>
   Description:
      ISAPI 'C:/Windows/Microsoft.net/Framework/v.1.1.4322/aspnet_isapi.dll' reported itself as
      unhealthy for the following reason: 'Deadlock detected'.

 

如果您使用 IIS 6.0, 会系统事件日志中您收到以下消息:

 

   Event Type:     Warning
   Event Source:   W3SVC
   Event Category: None
   Event ID:       1013
   Date:           5/4/2003
   Time:           1:03:47 PM
   User:           N/A
   Computer:       <ComputerName>
   Description:
      A process serving application pool 'DefaultAppPool' exceeded time limits during shut down.
      The process id was '<xxxx>'.

 

可能会进行对 HttpWebRequest.GetResponse 方法调用时还收到以下异常错误信息:
ôSystem.InvalidOperationException 有是没有足够的空闲线程 ThreadPool 对象以完成 operation.ö 中:
还可能在浏览器收到以下异常错误信息:
请求定时 out.ö ôHttpException (0 x 80004005):
注意 本文还适用于应用程序直接使 HttpWebRequest 请求。

原因

<script type="text/javascript">loadTOCNode(1, 'cause');</script>
因为 ASP.NET 的辅助线程和完成端口线程, 调用可用于执行请求数限制可能发生此问题。

对 Web 服务调用通常, 使用一个辅助线程来执行代码发送请求和一个完成端口线程以从 Web 服务接收回调。 但是, 如果请求重定向或需要验证, 调用可能使用多达两辅助和两完成端口线程。 同时发生多个 Web 服务调用时, 因此您可消耗托管 ThreadPool。

例如, 假设 ThreadPool 仅限于 maxworkerthreads, 10, 并且当前执行所有 10 工作线程正在等待回调来执行代码。 由于工作项排队以 ThreadPool 阻塞线程可用之前可从不执行回调。

其他潜在源争夺是 maxconnection 参数, System.Net 命名空间用于限制的连接数。 此限制通常, 按预期工作。 但是, 如果许多应用程序尝试使许多请求到单个 IP 地址同时, 线程可能需要等待一个可用连接。

解决方案

<script type="text/javascript">loadTOCNode(1, 'resolution');</script>
Machine.config 文件以最适合您情况中要解决这些问题, 可调整以下参数:
maxWorkerThreads
minWorkerThreads
maxIoThreads
minFreeThreads
minLocalRequestFreeThreads
maxconnection
executionTimeout
要成功解决这些问题, 请按照下列步骤操作:
限制同时到大约 12 每 CPU 执行, ASP.NET 请求的数量。
允许 Web 服务回调用于 ThreadPool 中自由线程。
选择一个适当值对于 maxconnections 参数。 根据您选择的 IP 地址和 AppDomains 使用数。
注意 : 建议来限制每 CPU 12 ASP.NET 请求的数量是有点任意。 但是, 此限制已证明能够适合大多数应用程序。

maxWorkerThreads maxIoThreads

<script type="text/javascript">loadTOCNode(2, 'resolution');</script> ASP.NET 使用以下两配置设置来限制辅助线程和完成线程所使用的最大数量:
<processModel maxWorkerThreads="20" maxIoThreads="20">
maxWorkerThreads 参数和 maxIoThreads 参数是可隐式乘以的 CPU 数。 例如, 如果有两个处理器, 的工作线程数是:
2 * maxWorkerThreads

minFreeThreads minLocalRequestFreeThreads

<script type="text/javascript">loadTOCNode(2, 'resolution');</script> ASP.NET 还包含以下配置设置决定多少辅助线程和完成端口线程必须可用于启动远程请求或本地请求:
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
如果还有, 不够线程请求是排队直到足够线程可以自由地发出请求。 ASP.NET, 因此不在同一时间执行超过下列数量的请求:
(* minFreeThreads maxWorkerThreads ) - 的 CPU 数
注意 minFreeThreads 参数和 minLocalRequestFreeThreads 参数是不隐性乘以的 CPU 数。

minWorkerThreads

<script type="text/javascript">loadTOCNode(2, 'resolution');</script> 存为 ASP.NET 1.0 Service Pack 3 以及 ASP.NET 1.1, ASP.NET 还包含以下配置设置决定了多少工作线程可能可立即向远程请求服务。
<processModel minWorkerThreads="1">
以多快速度比从 CLR 默认优化 " 线程 " 功能创建辅助线程创建由该设置控制线程。 此设置允许 ASP.NET 对服务请求, 可能是突然填充 ASP.NET 请求队列由于以 slow-down 在后端服务器, 突然暴发来自客户端, 或类似的请求会导致突然高度以多种请求队列中。 对于 minWorkerThreads 参数默认值为 1。 我们建议, 您将 < minWorkerThreads 参数值设置为以下值。
minWorkerThreads = maxWorkerThreads / 2
默认情况下, minWorkerThreads 参数是 Web.config 文件或 Machine.config 文件中不存在。 此设置隐性乘以的 CPU 数。

maxconnection

<script type="text/javascript">loadTOCNode(2, 'resolution');</script> maxconnection 参数确定如何多连接可对特定 IP 地址。 参数显示如下:
<connectionManagement>
    <add address="*" maxconnection="2">
    <add address="65.53.32.230" maxconnection="12">
</connectionManagement>
对于本文中前面讨论参数设置为所有在进程级。 但是, maxconnection 参数设置适用于 AppDomain 级别。 默认, 因为此设置适用于 AppDomain 级别, 最多两个连接创建到特定 IP 地址从每个 AppDomain 过程中您。

executionTimeout

<script type="text/javascript">loadTOCNode(2, 'resolution');</script> ASP.NET 使用以下配置设置来限制请求执行时间:
<httpRuntime executionTimeout="90"/>
也可以通过 Server.ScriptTimeout 属性设置此限制。

注意 如果您增加 executionTimeout 参数, 值可能还需要修改 processModel responseDeadlockInterval 参数设置。

建议

<script type="text/javascript">loadTOCNode(2, 'resolution');</script> 本节中推荐设置对所有应用程序可能无法工作。 但是, 以下附加信息可以帮助您进行适当调整。

如果进行一个 Web 服务调用到单个 IP 地址从每个 ASPX 页面, Microsoft 建议您使用下列配置设置:
设置到 100 maxWorkerThreads 参数和 maxIoThreads 参数的值。
设置到 12 maxconnection 参数的值 * N N (其中 N 是的, 您有 CPU 数)。
minFreeThreads 参数的值设置为 88 * N N minLocalRequestFreeThreads 参数来 76 N N *。
设置到 50 minWorkerThreads 的值。 请记住, minWorkerThreads 处于默认配置文件。 必须添加它。
一部分这些建议涉及简单公式涉及在服务器上的 CPU 数。 变量, 表示公式中的 CPU 数是 N 。 有关这些设置, 如果有 hyperthreading 启用, 必须使用的逻辑 CPU 数的物理 CPU 的数量而 例如, 如果与启用, hyperthreading 有四个处理器服务器值 N 公式中将是 8 代替 4

注意使用此配置时, 因为您可以同时执行最多 12 ASP.NET 请求每 CPU = 12 100 - 88。 因此, 至少 88 N 辅助线程和 88 N 完成端口线程可对其他使用 (例如用于 Web 服务回调) * *。

例如, 有服务器与四处理器和 hyperthreading 启用。 对于本文中提及配置设置基于这些公式, 将使用下列值。
<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50">
<httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"> 
<connectionManagement>
	<add address="[ProvideIPHere]" maxconnection="96"/>
</connectionManagement>

还, 使用此配置, 时 12 连接可用每个 CPU 按 IP 地址对于每个 AppDomain。 因此, 在下列情况下, 几乎争夺当请求正在等待连接, 并且不耗尽 ThreadPool:
Web 承载一个应用程序 (AppDomain)。
每对 ASPX 页面请求发出一个 Web 服务请求。
所有请求是到同一 IP 地址。
方案涉及下列之一但是, 当您使用此配置, 将可能使用太多连接:
请求是到多个 IP 地址。
请求是定向 (302 状态代码)。
请求需要身份验证。
从多 AppDomains 进行请求。
在这些方案, 最好对 maxconnection 参数和高值 minFreeThreads 参数和 minLocalRequestFreeThreads 参数可以使用较低值。

状态

<script type="text/javascript">loadTOCNode(1, 'status');</script>
此行为是设计使然。

参考

<script type="text/javascript">loadTOCNode(1, 'references');</script>
有关详细信息, 请访问 Microsoft Developer Network (MSDN) Web 站点:
http://msdn.microsoft.com/library/en-us/dnpag/html/scalenetchapt06.asp (http://msdn.microsoft.com/library/en-us/dnpag/html/scalenetchapt06.asp)

这篇文章中的信息适用于:
Microsoft ASP.NET 1.1
Microsoft ASP.NET 1.0
关键字: 
kbprb KB821268 KbMtzh kbmt
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值