2009-08-22 78 views
1

与我们的合作伙伴合作,我们现在开发了两套独立的Web服务供其使用。第一个是一个简单的“发布到https URL”样式的Web服务,我们通过在ASP.NET中构建一个网页来检查URL中的参数,然后采取相应措施,从而为其提供便利。这个“网络服务”(如果你可以这么称呼的话)一直非常稳定。ASP.NET Web服务故障排除?

在某个时候,合作伙伴要求我们开始使用基于SOAP的Web服务。根据他们的要求,我们在很大程度上基于以前的对象构建了一套新的Web服务,并重新实现为一个实际的“Web服务”。这个Web服务并不是非常稳定:每周大约一次,Nagios会提醒我们,我们的Web服务没有响应 - 而且快速的iisreset可以做到这一点。

分析日志输出并在调试器中工作并没有带来任何具体的结果。这个新Web服务的卷实际上比HTTP Web服务要低得多。我认为这可能是代码问题或平台问题,当然也可能是介于两者之间的问题。

我们试过,很少有改进:

  • 重复行为在实验室
  • 调试在Visual Studio调试器
  • 与IIS选项摆弄,给它自己的应用程序池

我的问题,下一步的故障排除步骤是什么?

环境: Windows Server 2003标准版R2 Service Pack 2的32位,Visual Studio 2005中,MS SQL 2005的.NET Framework 2.0.50727

+0

这将有助于知道你的web服务正在做什么。我们使用网络服务相当多,并且通常不会无缘无故地看到IIS摔倒。 – 2009-08-22 23:31:57

+0

通常,进行数据库连接,运行查询。还有一个exe系统调用。 – 2009-08-22 23:49:13

+0

感谢您的提示。我喜欢SQL Server Profiler这样的东西,我会着手使用procmon和perfmon来分析应用程序。 – 2009-08-22 23:57:23

回答

1

你可能会得到通过剖析你的web服务,并了解了一些答案,他们如何正在使用他们的资源。在这方面,perfmonprocmon都是非常有用的工具。

编辑:既然你说大约一个星期后发生错误,我唯一能想到的就是资源的使用。确保您的数据库连接正在清理,并且任何打开的文件(对exe的系统调用)都将被关闭。另外,如果你的web服务可以容忍它,IIS有一个触发定期回收App池的设置,以处理性能随着时间的推移而降低的情况。它很脏,但它可能适用于你的情况。

+0

嗯,感谢您的应用程序池回收技巧,这可能只是一个窍门。我们通常擅长释放数据库连接,但会再次检查。与系统调用相同。感谢您的指导。 – 2009-08-23 05:00:30

+0

我们的应用程序池显然默认设置为每29小时回收一次。我已将其更改为“每天凌晨4点”。虽然在那里我们注意到应用程序池显然只限于一个进程,并且我们启用了“Web Garden”功能来增加此功能。这似乎是你不应该打开的那种东西,但可能是我误解了一些东西。 – 2009-09-10 17:32:52

+0

29小时eh?尼斯。这将解释“随机”关闭。至于网络花园 - 我只能说,如果有一个被证明的理由这样做。我们运行一个负载很重的web服务,并且还没有看到需要使用它... – 2009-09-10 23:53:05

1

由于没有太多可以继续 - 这是我们遇到的另一个有关我们的Web服务的奇怪问题。

当Web服务停止响应内存使用情况如何?我们遇到了与系统上繁忙Web服务相关的内存和内存碎片问题(还有其他事情正在运行导致额外的碎片)。当我们重新考虑从更小的DLL加载Web服务并依赖于其他库(而不是一个大型库)时,我们能够解决内存碎片问题。

要确定发生了什么,我们会从侵犯应用程序池所在的iis工作进程转储,然后使用WinDbg进行审查。 http://www.microsoft.com/whdc/devtools/debugging/default.mspx

此外,我们使用DebugDiag进行postmortem转储。 http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1286

希望这提供了另一个方向来看待。

+0

它的确如此,我们碰巧有一个大的代码库DLL,这取决于。谢谢,我会检查一下。 – 2009-08-23 04:32:35

+0

只需添加注释:.Net会将Web服务驻留的dll加载到内存中,以检查其上的代码访问安全权限。网络服务收到大量的流量,当我们分析LOH时,当我们开始遇到内存问题时,有多达400份的dll。 IIS的重新启动解决了这个问题,但它会将每个人踢出应用程序 – Dan 2009-08-23 17:52:23