【问题标题】:FileLogTraceListener thowing System.IO.ExceptionsFileLogTraceListener 抛出 System.IO.Exceptions
【发布时间】:2013-03-22 09:54:31
【问题描述】:

我正在尝试找出为什么我们的一个遗留应用程序每天都会抛出异常。它是一个 VB.Net Windows 服务,它使用 Microsoft.VisualBasic.Logging.FileLogTraceListener 类来进行日志记录。

但是,它会引发以下异常,但我不知道是什么原因造成的:

System.IO.IOException: The handle is invalid.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.get_Length()
at Microsoft.VisualBasic.Logging.FileLogTraceListener.ReferencedStream.get_FileSize()
at Microsoft.VisualBasic.Logging.FileLogTraceListener.ResourcesAvailable(Int64 newEntrySize)
at Microsoft.VisualBasic.Logging.FileLogTraceListener.WriteLine(String message)

目前似乎每天抛出一次,问题是我需要确保所有内容都已记录。在这种情况下,仅捕获并吞下异常和要省略的日志对我来说是不可接受的。

我已尝试调查导致此 Windows 错误消息 (ERROR_INVALID_HANDLE - 0x06) 的可能原因,但我似乎找不到任何具体内容。

任何试图诊断此问题的帮助将不胜感激!

【问题讨论】:

  • 您对 FileLogTracerListener 有任何配置设置吗?
  • 我应该指出,这在我的开发、测试和 QA 环境中运行良好,并且只会在我的实时环境中导致 Windows 错误(定期)。在这种情况下,我认为配置不是问题。我开始怀疑它可能比.net框架低得多(即windows集群或服务器硬盘上的一些克隆进程)。
  • 您是否可以提供任何其他详细信息以便有人复制并可能对您有所帮助?
  • 是否有多个进程(甚至 AppDomain)写入同一个文件?

标签: .net windows


【解决方案1】:

为了帮助诊断问题,请检查以下内容:

  • Disable Trace UseGlobalLock For Better Tracing Performance



    useGlobalLock="false" />


    ...

  • 从多线程/AppDomain/Services 中排除日志记录。

  • 使用Perfmon 检查是否同时发生密集的 IO 操作,例如正在备份磁盘...

  • 确保驱动程序是最新的。

  • 如果上述方法失败并且您想找出根本原因,您需要使用 adplus 进行内存转储并使用 WinDBG 和 SOS 来查看根本原因。

如果所有这些都无法缩小问题范围replace the Servers disk drives

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 2015-09-10
    • 2014-05-03
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2014-11-23
    • 2013-05-30
    • 2018-11-09
    相关资源
    最近更新 更多