如何隔离IIS线程池崩溃

时间:2013-02-16 18:57:54

标签: asp-classic iis-6 threadpool windows-server-2003

此问题与我最近提出的connection reset问题有关。我也在追查SO article和此SO article中的信息。我想知道的是追踪IIS线程池崩溃原因的最佳方法。我也在和我们的供应商讨论这个问题。以下是详细信息。

我有一个IIS应用程序。当我们几年前购买第一个COM工具包时,它使用了一个非常简单的ASP页面,模仿我们供应商提供的样本。此应用程序在Windows Server 2003上的IIS上运行。该应用程序是一个单独的Web服务,而不是虚拟根目录,并且它的端口号不同于80.换句话说,我们不使用其他NIC或虚拟IP地址。该网站流量很小,但配置为有DMZ。整个配置对我来说看起来有点时髦。

地址验证请求从使用http协议的无浏览器应用程序发送到IIS应用程序。街道号码,街道名称,城市和州与其他一些标识一起发送,并发回响应。其中一个应用程序是用C语言编写的;另一个是用Clojure写的。

向新构建的IIS应用程序发送“单次”请求对两个应用程序都可以正常工作。发送大量请求,并且很难确定是否超过25或其他数字,导致IIS线程池崩溃。这或多或少是错误日志所说的。

此应用程序在W2K / IIS服务器上运行多年没有发生任何事故。 ASP页面通过我们从供应商处购买的COM工具包与地址验证引擎进行通信。我们不得不升级到新服务器(和2012 COM工具包),因为最新的COM工具包不能安装在W2K上,新的COM工具包包含对新的USPS地址验证规则的支持。如果没有新的工具包,我们将验证更少的地址,并且唯一可以对地址进行条形码编码并获得折扣的方法是验证地址。 (当你发出29,000辆机动车消费税时,折扣会有所帮助。)

追踪这个问题的最佳方法是什么,所以我能找到罪魁祸首?我正在寻找与良好信息和答案相关的链接。我很抱歉含糊不清;我知道SO的规则,并努力提供尽可能详细的信息。我可以重新编辑这篇文章,并提供日志条目,如果有人想看到这些。底线是我的Clojure客户端(处理批处理请求)开始重置,并在IIS线程池崩溃时崩溃。

结语:

我们认为快速打开和关闭COM对象是个问题,我们以这种方式编写ASP页面是由我们的供应商批准的。为了解决这个问题,我们还需要安装MS Access以获得额外的地址验证功能,我们最终编写了一个ActiveState Perl程序来解决多种需求。

首先,我们购买了一个ActiveState产品,我们的Perl程序将作为服务运行。该服务将以参数和端口号开始,允许发送基于http的请求,就像之前一样。在这种情况下,COM对象将在Perl程序启动时打开一次,并在Perl程序退出时关闭。

Perl程序提供的其他功能与本文没有密切关系,但是这个Perl程序的编写避免了对旧配置所需的IIS和MS Access的需求。

所以,如果你想从这篇文章中获取一些东西,它将在打开程序时打开一个COM对象,并在程序关闭时关闭,至少对于W2K Server 2003及更高版本。

1 个答案:

答案 0 :(得分:0)

我们在应用程序运行缓慢方面存在问题。我们做了一个应用程序池内存转储,然后分析了转储。

http://support.microsoft.com/kb/919790