将WCF服务从一个生产服务器移动到另一个生产服务器(配置非常相似)后,通过Windows事件跟踪的自定义事件记录已停止工作,但仅适用于一个应用程序。
错误是在EventProvider类的ctor中引发的,它是一个Win32“没有足够的存储”错误。
WCF服务是'每个调用的并发模式多个实例上下文模式'每个调用配置的线程。在监视时,60个线程属于该过程。每次调用都会调用EventProvider ctor。它是使用AppFabric托管的IIS / WAS。
同一台服务器上的另一个应用程序正常运行。
我不知道如何诊断这个。如果有人甚至可以提出一个起点,我将不胜感激。
答案 0 :(得分:1)
确定这与VMWare配置有关。该机器是12Gb服务器,但配置为永久保留6Gb,从池中取出6Gb。随着内存压力的大量增加以及物理层的交换,随机Win32异常开始在VM中抛出。解决方案是提供更多内存。
更新:以上是巧合,它最有可能与VMWare无关。
一个月后问题又回来了。似乎服务器上的某些内容已经改变,这会减慢垃圾收集速度,而且我的每次调用wcf服务都没有明确地处理EtwRegistration句柄(即我没有明确地处理EventProvider)。实验表明,每个进程有1000个EventProviders限制。服务器上的性能变化导致手柄泄漏达到该限制。
进一步更新:如果有人想增加提供商的数量,而不是出于任何原因强制清理,我认为这可能会有所帮助http://support.microsoft.com/kb/2583244