代码之家  ›  专栏  ›  技术社区  ›  Sentinel

EventProvider构造函数引发Win32Exception存储空间不足

  •  0
  • Sentinel  · 技术社区  · 11 年前

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

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

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

    同一服务器上的另一个应用程序工作正常。

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   Sentinel    10 年前

    好的,结果证明这与VMWare配置有关。该机器是一台12Gb服务器,但已配置为永久保留6Gb,其中6Gb取自池。由于大量的内存压力和物理级别的交换,虚拟机中开始抛出随机的Win32异常。解决方案是提供更多的内存。

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

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

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