长时间运行HttpWebRequests

PHe*_*erg 6 asp.net iis-6 httpwebrequest

我有一个在IIS6服务器上运行的ASP.NET Web应用程序.该应用程序正在对远程计算机上的xml服务进行长时间运行的调用.远程计算机上的某些服务调用需要很长时间才能执行(有时长达4分钟).长期解决方案是使调用异步,但作为短期解决方案,我们希望增加调用的超时和整个httpRequest超时.

我担心的是,长时间运行的呼叫将填满请求队列并阻止"正常"页面请求完成.如何调整服务器,IIS和应用程序设置以临时解决问题?

目前,每分钟大约有200个页面请求,这导致270个服务请求/分钟.

  • 当前的executionTimeout是360(6分钟)
  • 当前服务呼叫超时为2分钟

Dav*_*tas 8

这篇关于微软知识库的文章包含了你可能需要的几乎所有信息:

*从ASP.NET应用程序发出Web服务请求时出现争用,性能不佳和死锁


我将就上面文章中处理的一些具体项目进行一些研究.以下信息适用于IIS6,适用于IIS7的注释.

将Processor Worker线程池从25增加到至少100

为线程池大小的默认值是100,因为默认值自动配置.

autoConfig涵盖的值是

  • maxWorkerThreads
  • maxIoThreads
  • MAXCONNECTION

还有一个必须更改的值是 - ASPProcessorThreadMax,这只能在IIS6 中的IIS配置数据库(通过adsutil工具)中设置.[IIS7相当于processorThreadMax值]

所以我选择不更改machine.config设置,因为它们很好,还有其他参数会受到关闭autoconfig的影响,而是通过IIS元数据库将ASPProcessorThreadMax从25 更改为100(唯一的方法是更改​​此值).

例如

cscript %SYSTEMDRIVE%\Inetpub\AdminScripts\<nowiki>adsutil.vb</nowiki>s SET W3SVC/AspRequestQueueMax 100
Run Code Online (Sandbox Code Playgroud)

每台服务器最多连接数

MAXCONNECTION自动配置将该值设置为12*CPU的数量,这是多少个连接,可向每个地址要连接在同一时间.

调试

您可以执行以下操作:

监视请求是否在队列中等待

监控以下计数器:

  • 运行perfmon
  • 添加计数器:    应用程序队列中的ASP.NET应用程序/请求

这将告诉我们,由于工人短缺,工作项目是否排队.

检查应用程序池使用的标识

  1. 打开IIS管理器
  2. 检查您的站点在IIS管理器中使用的应用程序池.
  3. 选择"应用程序池"列表中使用的应用程序池,然后选择"右键单击" - >"属性",查看正在使用的帐户标识.
  4. 它应该是默认的网络服务.