2009-08-12 56 views
0

我们有一个IIS托管的Web方法,它在我们约10%的时间内随机死亡。在试图调试时,我们在每个真实代码行前添加了Log.Debug()消息,并且它似乎在随机行中死去。IIS托管的Web服务方法调用随机模块

有没有人看到这个或有一个想法如何调试呢?

[附加详情]

我们花了很多时间在看它,并发现了以下...

  1. 我们有访问一个单独的自承载WCF服务相同的数据库并且位于同一台计算机上。当它处于重负荷下时,网络方法每次都会发出咕噜声。如果它不在负载情况下通常工作正常(但不是100%)。

  2. 高CPU似乎不是问题的一部分。我们运行了一个创建高CPU负载的小应用程序,并且Web服务没有死亡。

  3. 当我们新建一个XmlSerializer(而不是执行sgen precomp)或者让NHibernate创建一个SessionFactory时,Web服务就会消亡。这些东西唯一的两个共同点是他们1)看起来像人们通常做的事情。2)看起来他们会相当密集。

  4. 我们已经添加了Global.asax来尝试捕获Application_End和Application_Error,但都没有触发事件。这对我来说意味着我们没有处理正常的应用程序池重置?

回答

0

想通了..真是两个问题..

  1. 我们添加的Global.asax,但它并没有得到复制这也解释了为什么我们没有看到任何消息。我们修复了这个问题,发现...

  2. 我们的WCF日志被写出到IIS Web服务的bin目录。回想起来,这是一种愚蠢的事情,因为WS是一个老派的Web服务。 WCF的东西是在同一目录仅适用于某些原因,因为谁设置的东西,最初的人走了是未知发送给我们。

获得的经验..某处有是解释一切的消息..你只需要找到它。

0

听起来像这可能是一个线程问题。您正在使用信息性的调试信息 - 您应该尝试在运行调试程序并突破所有异常时重现问题。请确保您检查所有Windows日志,以了解应用程序池崩溃的原因。

每个评论:很难说,但很多事情可能会导致线程出现“死亡”。内存问题:你在做任何互操作吗?不正确的封送处理:您是否触摸另一个线程上的数据?但是,我会玩这个概率,并问你是否确定你处理了可能发生的任何异常并记录下来。你确定你不是在吞噬一个异常并且不报告它吗?低下的地方?这是一个权限问题?您是运行部分信任还是低权限用户帐户?

+0

在我们的开发环境中重新创建这种情况将非常困难,但我认为我们已经接近了必须将其视为选项的观点。 在线程方面我认为是这样,但是会导致IIS线程死亡的原因是什么?我们在Windows事件日志中看不到任何与IIS有关的消息..这看起来很奇怪吗?不应该有一个启动信息? – 2009-08-12 19:23:13