【问题标题】:Lost Events With In Memory Recording内存记录丢失的事件
【发布时间】:2019-06-10 18:27:23
【问题描述】:

为什么我记录到内存缓冲区中却总是丢失事件?

这对我来说毫无意义。没有缓冲区被丢弃但单个事件怎么会发生?我已将问题追溯到 CLR Rundown 会话,该会话总是丢失一些事件。问题似乎是我有大量托管进程(大约 60 个),它们都试图同时将它们的事件发送到 ETW。

我可以用

重现这个
C>xperf -start ClrRundown -on "Microsoft-Windows-DotNETRuntime":0x118:5+"Microsoft-Windows-DotNETRuntimeRundown":0x118:5 -buffersize 512 -minbuffers 512 -maxbuffers 1024 -Buffering

C>xperf -Loggers ClrRundown
Logger Name           : ClrRundown
Logger Id             : 1e
Logger Thread Id      : 0000000000000000
Buffer Size           : 512
Maximum Buffers       : 512
Minimum Buffers       : 512
Number of Buffers     : 512
Free Buffers          : 504
Buffers Written       : 0
Events Lost           : **29**
Log Buffers Lost      : 0
Real Time Buffers Lost: 0
Flush Timer           : 0
Age Limit             : 0
Log File Mode         : Buffered StopOnHybridShutdown IndependentSession
Maximum File Size     : 0
Log Filename          :
Trace Flags           : ".NET Common Language Runtime":0x118:0x5+"Microsoft-Windows-DotNETRuntimeRundown":0x118:0x5

我不关心少数丢失的事件,但在打开此类跟踪时,我总是会收到 WPA 的警告。这让 WPA 的非普通用户感到困惑,他们害怕自己做错了什么,并阻止加载跟踪文件。 有没有办法防止丢失事件?我发现的唯一另一个标志是来自 xperf 的 -NoPerProcessorBuffering 也没有帮助。将缓冲区大小增加到 8MB 也没有改变任何东西。

如果没有丢失事件就无法记录数据,是否有廉价且快速的方法来重置生成的未合并 ETL 文件的丢失事件计数?

【问题讨论】:

    标签: etw


    【解决方案1】:

    既然有办法摆脱这些虚假的丢弃事件,我决定直接重置 ETL 文件的丢失事件计数器:

    如果您调用该方法,您可以重置作为 int 的 LostEvents 计数:

    // Lost event offset is taken from _TRACE_LOGFILE_HEADER32/64 which is the same for x64 and x86
    const int LostEventOffset = 0x98;
    
    private static void ResetLostEvents(string etlFile)
    {
        using (var file = File.OpenWrite(etlFile))
        {
            file.Seek(LostEventOffset, SeekOrigin.Begin);
            using (BinaryWriter overwriter = new BinaryWriter(file))
            {
                overwriter.Write((int)0);
            }
        }
    }
    

    这是在 Win7 和 10 x86、x64 上测试的,适用于我目前获得的所有 ETL 文件。

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多