0

将 WCF 服务从一台生产服务器移动到另一台生产服务器后,配置非常相似,通过 Windows 事件跟踪的自定义事件日志记录已停止工作,但仅适用于一个应用程序。

EventProvider 类的 ctor 中引发了错误,这是一个 Win32“存储空间不足”错误。

WCF 服务是每个调用配置的“并发模式多个,每次调用实例上下文模式”线程。在监视时,有 60 个线程属于该进程。每次调用都会调用 EventProvider ctor。它是由 AppFabric 托管的 IIS/WAS。

同一台服务器上的另一个应用程序运行正常。

我不知道如何诊断。如果有人甚至可以提出一个起点,我将不胜感激。

4

1 回答 1

1

好的,这与 VMWare 配置有关。该机器是 12Gb 服务器,但配置为永久保留 6Gb,其中 6Gb 从池中获取。随着大量内存压力和物理级别的交换,随机 Win32 异常开始在 VM 中抛出。解决方案是提供更多可用内存。

更新:以上是巧合,很可能与 VMWare 无关。

一个月后问题又回来了。似乎服务器上的某些东西发生了变化,这减慢了垃圾收集的速度,而且我的每次调用 wcf 服务没有显式地处理 EtwRegistration 句柄(即,我没有显式地处理 EventProvider)。实验表明,每个进程有 1000 个 EventProvider 的限制。服务器性能的变化导致句柄泄漏达到该限制。

进一步更新:如果有人想增加提供者的数量,而不是出于任何原因强制清理,我认为这可能会有所帮助http://support.microsoft.com/kb/2583244

于 2013-10-25T08:04:33.567 回答