问题标签 [etw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - ETW ProcessTrace() 试图在 XP 上保留 1GB 内存?
我目前正在编写一个通过 ETW 跟踪功能使用 NT Kernel Logger 的应用程序。它以实时模式消耗。它在我的 Windows 7 测试机器上运行良好,但在我的 XP VM 上,我经常遇到内存不足的异常。
使用 APIMonitor(顺便说一句,令人惊叹的工具),我将其追踪到使用 ProcessTrace() Win32 API 调用本身对 NtAllocateVirtualMemory() 的调用。它正在尝试分配 1GB 的连续内存,如屏幕截图所示。
有没有人遇到过这个?我无法想象为什么它需要分配这么多内存。此外,由于调用发生在未记录的 Win32 API 函数 (WmiMofEnumerateResourcesA()) 中的 ProcessTrace() 调用堆栈的深处,看来我真的无法影响它。有没有人遇到过这个?我会很感激任何潜在的解决方案。
我需要支持 XP/2003 和 32 位版本,我真的不能假设 1GB 的连续内存可用。实时处理也是一项要求。但是,我可以考虑使用不涉及丢失事件的文件支持日志记录的任何解决方法,例如,如果可能的话,我将“实时”处理添加到 .ETL 文件中的新事件。
c++ - 窗口 - 基于清单的 ETW 提供程序问题
我有一个 C/C++ 应用程序,我想在其中使用基于清单的 ETW 解决方案。我在使用打开生成的 *.etl 的工具(如 Windows 上的默认工具或任何其他工具)时遇到问题,因为我看不到我的事件的具体细节(清单中定义的模板)
如何将清单注册到系统并将其指定给众所周知的 ETW 消费者工具以显示该信息?
我做了http://www.codeproject.com/Articles/570690/Application-Analysis-with-Event-Tracing-for-Window中提到的
还注册了清单:
有任何想法吗 ?
windows - Windows 的事件跟踪(ETW):基于资源文件路径的 wevtutil 不稳定行为
好吧,我在微软论坛上问了这个问题,对他们的行为感到惊讶。
我也在这里重新发布了一些更多信息。
这篇 使用 wevtutil 安装 WPT 清单问题的帖子 建议 wevtutil 对清单中的 resourcefileName 属性的大小有限制。
我认为这一定不是,但不幸的是!
我想知道为什么会有这样的限制。
这就是我所做的。我有一个路径深度相当适中的解决方案(例如 C:\users\\\
如果我将 resourceFileName 和 messageFileName( 在设置事件跟踪所需的清单文件中指向。请参见此处:http: //msdn.microsoft.com/en-us/library/windows/desktop/dd996930 (v=vs .85).aspx) 到它的原始路径中的 exe(它是上述格式)我收到一个警告:
如果我将 exe 的路径设置为 C:\temp\publisher.exe 之类的东西,然后手动复制
解决方案输出目录中的 exe 到 C:\temp 文件夹,一切正常。
PS:此外,exe 必须具有正确的可访问权限。
现在,我的问题是,为什么对文件路径进行这种不必要的限制?如果这是编写这个据说功能强大的 api 的方式,它不能处理超过一定长度的文件路径,那么我很遗憾地说它的编程非常糟糕。具有讽刺意味的是,它有很多我喜欢在我的应用程序中使用的功能。也就是说,是否有任何具有 resourceFileName 和 messageFileName 属性的特定选项可以改变这种行为?msdn 没有说什么。还是我错过了什么?
首先,如果有人找到了从任何路径安装事件发布者的解决方法,请您赐教?
第二,微软的回应。甚至没有正确阅读我的问题,版主将我的问题移到了 Windows Server 线程(他用 resourceFileName 这个词猜到了,这显然可能与 Windows Server 有一些关系。)我一直对 Microsoft 不满意,但这很烦人!
.net - 使用 EventSource 记录 ETW 丢失事件的风险
我正在检测我的 .NET 4.5 应用程序以使用EventSource
该类发出 ETW 事件。目标是能够捕获其中一些事件(错误级别事件)以进行错误记录。
在做了一些阅读和测试之后,我担心这种错误记录方法的可靠性,特别是关于丢失或丢失事件的可能性。如果我的错误记录不起作用,我需要关闭应用程序(在我的情况下,它运行未报告的错误是不安全的)。使用 ETW 和EventSource
时,如何确定我的错误得到正确记录?
显然,部分答案将取决于监听事件的内容。就我而言,我计划使用最新的 MS 企业库中的“语义日志记录应用程序块”。
以下是 Microsoft 谈论错过事件的可能原因的一个来源: 关于事件跟踪
他们在那里列出了丢失事件的这些可能原因
总事件大小大于 64K。这包括 ETW 标头以及数据或有效负载。由于事件大小由应用程序配置,因此用户无法控制这些丢失的事件。
ETW 缓冲区大小小于总事件大小。用户无法控制这些丢失的事件,因为事件大小是由记录事件的应用程序配置的。
对于实时日志,实时消费者没有足够快地消费事件或完全不存在,然后支持文件被填满。如果在记录事件时停止并启动事件日志服务,则会出现这种情况。用户无法控制这些丢失的事件。
记录到文件时,磁盘速度太慢,无法跟上记录速度。
为了查看使用 EventSource 类是否以某种方式缓解了这些问题(例如,它是否会以某种方式截断大型有效负载),我进行了一些测试。我尝试记录长字符串,但它在 30,000 到 35,000 个字符之间失败(与 64KB 最大事件有效负载一致)。对于太大的字符串,它只是默默地没有做任何事情,在我的语义日志记录应用程序块日志中根本没有任何事件。之前和之后的事件像往常一样写。
所以每当我的有效载荷中有一个字符串时,我必须通过一些截断器传递它?我是否也需要手动避免生成“太快”的事件(这怎么可能)?
Microsoft Patterns and Practices 应该引导我们找到好的......模式和实践......所以也许我只是在这里遗漏了一些东西。
更新:
显然,在消费应用程序中有一些“事件太快”条件的通知。我今天第一次收到这个:
级别:警告,消息:由于缓冲区溢出或跟踪会话中的架构同步延迟,某些事件将丢失:Microsoft-SemanticLogging-Etw-svcRuntime
然后在关闭会话时:
级别:警告,消息:在跟踪会话“Microsoft-SemanticLogging-Etw-svcRuntime”中检测到丢失 1 个事件。
更新2:
Enterprise Library Developers Guide描述了我刚才提到的行为。
您应该监视语义日志记录应用程序块生成的日志消息,以了解缓冲区溢出和丢失消息的任何迹象。例如,事件 id 为 900 和 901 的日志消息表明接收器的内部缓冲区已溢出;在进程外场景中,事件 ID 806 和 807 表示 ETW 缓冲区已溢出。您可以修改接收器的缓冲配置选项,以减少缓冲区因典型工作负载而溢出的可能性。
我的问题仍然存在,我是否可以在使用语义日志记录的同时确保在删除错误时我的应用程序不会运行?可以丢弃正常的跟踪事件...
我目前的想法是使用老式日志记录技术在单独的类中记录“严重”错误,并通过 ETW 管道保留不太严重的错误(以及调试类型事件)。这真的不会太糟糕......如果我找不到更好的建议,我可能会将其作为解决方案发布。
更新 3:
我收到的“丢失事件”警告与缓冲区溢出无关,事实证明这是您将 nullstring
作为有效负载值传递时收到的消息。
c# - ETW EventSource .NET 4.5 的滚动文件
我一直在尝试在 .net 4.5 中使用 ETW。
我有一个 WCF 服务和控制台应用程序,我想要它使用 EventSource 来编写消息,但是,我很难理解如何创建自己的 ETW(EventSource 和 EventListener)以记录到文件(滚动文件)。
有什么建议么?
.net-4.5 - .Net 4.5 EventSource ETW 提供程序未显示在提供程序列表中
我一直在努力使用 .NET4.5 的新功能 ETW(EventSource)。我无法使用 perfmon->Data Collector Sets 将其显示在跟踪提供程序列表中。我能够使用 perfview 查看日志。我能够使用 EventSource 类的静态方法 GenerateManifest 从其生成清单。这将在 EventSource 类中提供 myevents 的清单,但它不包含有关通道的详细信息。
我的问题是如何在为 perfmon 跟踪会话生成清单文件后添加通道特定信息?我还想使用 Perfmon 的跟踪会话来启用提供程序而不是 perfview。
非常感谢任何输入。
windows - 如何在驱动程序级别使用 ETW 事件?
从我的 Windows 驱动程序内部,我想知道如何:
a) 打开某些内置提供程序
b)通过提供作为我的驱动程序一部分的回调函数(我想做某事)来实时消费事件。
c) 关闭供应商。
PS:我使用了“打开”和“关闭”这两个词。在 Windows ETW 用语中,我认为它被称为“启用”提供程序。
到目前为止,我一直在网上搜索有关如何执行此操作的信息,但尚未找到任何信息。
asp.net - 是否有任何由 IIS 或 ASP.NET 创建的包含请求 URL 的 ETW 事件?
我一直在尝试捕获由 IIS 或 ASP.NET 创建的包含请求 URL 的 ETW 事件,但没有取得多大成功。
我正在使用 Windows 8(开发)和 Windows Server 2008 R2(生产),因此分别使用 IIS 8.0 和 7.5。我知道在 IIS 8.5 中有更好的 ETW 支持,但不幸的是,目前这无济于事。
使用PerfView,收集系统范围的事件并使用以下附加提供程序,我在命名空间中获得了一些事件,Microsoft-Windows-IIS-Configuration
但没有包含单个请求详细信息。
其他提供者
如果我运行logman query providers
,我会得到以下信息,所以我知道这些提供程序可用(在我的 Windows 8 机器上)。
我也尝试过使用 logman 创建一个 ETL 文件,但这似乎没有捕获任何与 IIS 相关的内容:
etw.ps1
提供者.txt
0xFFFFFFFE
我已经用and尝试了上述方法0xFFFFFFFF
。
.net-4.0 - EventSource .net 4.0 生成清单
我一直在尝试在 .net 4.0 中使用 ETW。
我已经开始使用 Microsoft EventSource Library 1.0.4-beta ( https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource )
这是我为我的应用程序生成事件而编写的代码。
我无法从侦听器生成清单。下面的代码
当我尝试调用它时,我得到 NullReferenceException,请建议我遗漏任何东西。是否可以使用此版本将 EventMessage 推送到 EventViewer。
作为这个 NuGet 包的一部分,我有 eventRegister、Install Bat、Microsoft.Diagnostics.Tracing.EventSource.targets。我不确定这些将如何帮助清单生成。
如果有人对此有任何想法(或)工作,请提供帮助。
提前致谢。
logging - 与常规 EventLog API 相比,使用 ETW EventSources 有哪些优势?
我们目前正在研究替换我们系统上的日志记录。在许多地方,我们已经在使用常规的 EventLog API,如果事件源不存在,它会自动创建事件源。
我想知道将我们的代码转换为正确使用 EventSources 而不是仅使用常规 EventLog API(非常易于使用)有多少好处。这值得做吗?
我们希望同时实现日志记录(我们想了解单个成功/错误/信息/警告状态事件)和跟踪。