如何隔离IIS线程池崩溃

问题描述:

此问题与我最近问一个问题connection reset有关。我也在追踪这个SO article和这个SO article的信息。我想知道的是追踪IIS线程池崩溃原因的最佳方法。我也与我们的供应商一起解决这个问题。这里是细节。如何隔离IIS线程池崩溃

我有一个IIS应用程序。它使用一个非常简单的ASP页面,仿照我们供应商提供的样本,当时我们几年前购买了我们的第一个COM工具包。此应用程序在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地址验证法规的支持。我们将验证更少的地址,而不使用新的工具包,并且可以对地址进行条形码编码并获得折扣的唯一方法是验证地址。 (当您发送29000汽车消费券,折扣会有所帮助。)

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

结语:

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

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

由Perl程序提供的其他功能没有密切关系这个职位,但这个Perl程序的编写消除了对IIS和MS Access,它被要求与旧配置的需要。

所以,如果你想利用的东西,从这个职位,这将是开放的程序打开一个COM对象和密切的方案密切,至少在W2K Server 2003和更高。

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

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

+0

感谢您的信息。我的申请并不慢。有时候,它可以正常工作,并且可以一次处理数百个地址。有时,25个地址会导致线程池崩溃。 – octopusgrabbus 2013-02-16 20:28:14

+0

转储将允许您分析内存使用情况,打开连接。等等 – Victor 2013-02-17 01:32:34