与我们的合作伙伴合作,我们现在开发了两套独立的Web服务供他们使用。第一个是一个简单的“发布到https URL”样式的Web服务,我们通过在ASP.NET中构建一个检查URL中的参数的网页来促进,然后相应地采取行动。这个“网络服务”(如果你可以称之为)非常稳定。
在某个时候,合作伙伴要求我们开始使用基于SOAP的Web服务。根据他们的要求,我们在很大程度上基于之前的对象构建了一组新的Web服务,并重新实现为实际的“Web服务”。这个网络服务并不是很稳定:每周大约一次,Nagios会提醒我们我们的网络服务没有响应 - 而快速的iisreset可以解决这个问题。
分析日志输出并在调试器中工作并没有带来任何具体的结果。此新Web服务上的卷实际上远低于HTTP Web服务。我认为这可能是代码问题或平台问题,当然还有介于两者之间的问题。
我们尝试过,几乎没有改进:
我的问题是,接下来的排查步骤是什么?
环境: Windows Server 2003标准版R2 Service Pack 2 32位,Visual Studio 2005,MS SQL 2005,.NET Framework 2.0.50727
答案 0 :(得分:1)
您可以通过分析您的网络服务并了解他们如何使用他们的资源来获得一些答案。 perfmon
和procmon
在这方面都是非常有用的工具。
编辑:既然你说错误发生在一个星期后,我唯一能想到的就是资源使用。确保正在清理您的数据库连接,并且正在关闭所有打开的文件(对exe的系统调用)。
此外,如果您的Web服务可以容忍它,IIS有一个设置触发定期回收应用程序池,以处理性能随时间降低的情况。它很脏,但它可能适用于你的情况。
答案 1 :(得分:1)
由于没有太多事情要做 - 这是我们针对我们的网络服务提出的另一个奇怪的问题。
当Web服务停止响应时,内存利用率如何?我们遇到了与系统上繁忙的Web服务相关的内存和内存碎片问题(还有其他事情正在运行导致额外的碎片)。当我们重新考虑Web服务从较小的dll加载并依赖于其他库(而不是一个大型库)时,我们能够解决内存碎片问题。
为了确定发生了什么,我们会从应用程序池所在的有问题的iis工作进程中获取转储,然后使用WinDbg进行审核。 http://www.microsoft.com/whdc/devtools/debugging/default.mspx
此外,我们使用DebugDiag来进行事后转储。 http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1286
希望这提供另一个方向来看待。