问题标签 [perfview]
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.
.net - 如何在 perfview 中解释 RtlUsrThreadStart?
查看 PerfView 中 CPU 堆栈的截图,我不确定如何解释第一条记录。
我不能安全地排除记录,因为 CallTree 中的每个线程都以此帧开头。但困扰我的是为什么帧需要独占 181 秒以及如何使用 thre 帧。
我应该在 CPU 堆栈中安全地忽略它吗?
它在内部做什么需要时间(因为它显示有这么多的独占时间)?
编辑
如果我在 GroupPats 部分中选择“无组”(即空字符串),则该ntdll!RtlUserThreadStart
帧位于末尾(它“几乎不占用” CPU 时间)。还有很多低级函数调用我无法轻松解释,因为它们是在内部调用的,但总的来说它要好得多..
Edit2(用于 usr)
我今天拍摄了 PerfView 会话。它是服务器应用程序,所以有很多线程。所以视图对于单线程来说是可以的,但对我的目的来说不是很有价值。我想基本上看按名称视图,但我很不确定那里的 RtlUserThreadStart 是什么意思..
c# - 从不同线程发布的 ETW 事件中缺少 ActivityId
所以我有一个 WCF 服务,我在我的开发机器上的控制台应用程序中托管。我在同一台机器上运行PerfView来收集 ETW(Windows 事件跟踪)事件。WCF 服务使用 TPL(任务并行库),我试图在 WCF 请求的整个生命周期内关联所有线程中的 ETW 事件。我说的是服务器,而不是客户端和服务器。但是,当我查看PerfView中的事件并将视图过滤到仅来自我的自定义的那些事件时,EventSource
只有某些线程上的事件具有ActivityId
. 对于任何给定的线程,所有事件都具有ActivityId
或没有事件。此外,所有事件都没有RelatedActivityId
.
此链接与语义日志记录应用程序块(SLAB)有关,但其中提到:
使用 TPL 任务时,每个线程都有自己的活动 ID,并且 TPL 调度代码会自动发布包含 ActivityId 和 RelatedActivityId 值的传输事件。这些可用于关联相关事件。
这对我来说似乎根本不是这样。我不仅没有看到任何与活动 ID 相关的传输事件,而且在许多情况下,正如我之前提到的,活动 ID 完全丢失了。
根据这个 SO 答案:https://stackoverflow.com/a/27620321/1937249:
如果您使用进程外侦听器,则存在错误,即按名称的 TPL 配置不起作用,应使用 GID:https ://slab.codeplex.com/workitem/62
所以我尝试将事件源的 GUID 添加到PerfView 的“附加提供程序”,而不是像这样的名称:
不过,这并没有什么不同。我的事件已发布,但其中许多仍然缺少它们ActivityId
,并且所有事件都缺少它们的RelatedActivityId
.
最后一件事可能是相关的,我使用的是NuGet 包Microsoft.Diagnostics.Tracing
中的命名空间,而不是框架中内置的命名空间。Microsoft.Diagnostics.Tracing.EventSource
System.Diagnostics.Tracing
编辑
这是一张显示从 TplEventSource 捕获的所有事件类型的图像。我假设这意味着 TplEventSource 已启用。我不清楚我是否应该在列表中看到“转移事件”,或者其中一个事件是否应该有一个关键字或其他表明它是转移的字段。如果应该有一个实际的“转移事件”,我在列表中看不到任何类似的东西。
PerfView输出
EventSource
这是我为单个 WCF 请求自定义的事件列表的图片。您可以看到请求从线程 id 10,724 开始。该线程上的每个事件都有一个ActivityId
. 'Asi-Geoservices/StartAuthenticateRequest/Start' 进行异步数据库调用,应用程序在线程 8,268 上恢复。线程 8,268 上的所有事件都没有ActivityId
. 'Asi-Geoservices/StartServiceProviderRequest/Start' 发出一个异步 HTTP 请求,应用程序在线程 11,764 上恢复,再次,该线程上的每个事件都有一个ActivityId
. 在“Asi-Geoservices/StartServiceProviderRequest/Stop”之后,进行了另一个异步数据库调用,应用程序再次在线程 8,268 上恢复,请求最终完成,ActivityId
.
c# - 在 Windows 性能分析器中查看 EventSource 活动持续时间
我一直在玩 ETW 和一些基于System.Diagnostics.Tracing.EventSource的自定义事件。这一切都与 TPL 配合得很好,这意味着我什至可以在不同的线程中获得相关的活动——一切都非常好。我正在使用PerfView来验证它是否正常工作。
我现在想在我的分析中开始使用Windows 性能分析器,但我看不到如何获得类似于数据表中显示的活动持续时间的任何内容 - 类似于PerfView中的 DURATION_MSEC 计算列。我注意到持续时间可用作通用事件图表上的工具提示,因此该信息似乎在工具中可用。
有谁知道如何在WPA中进行设置?
.net - 在生产环境中运行 PerfView
我想在生产服务器上运行 PerfView -> Collect with default CPU Sample Interval一段时间。另外,我想使用 Take Heap Snapshot 来检查内存泄漏。这是一个好的决定吗?它如何影响服务器资源和服务器应用程序的响应能力?
events - PerfView 无法捕获自定义 ETW 事件
我有一个演示解决方案,它使用 System.Diagnostics.Tracing.EventSource 类引发事件。我的课程如下:-
我按照此处给出的步骤使用 PerfView 工具查看此解决方案生成的事件。我已经*DemoEvent
在 PerfView 的附加提供者部分给出了。但是,我无法在 PerfView 的输出中看到这些事件。有人能帮我一下吗?