3

查看 PerfView 中 CPU 堆栈的截图,我不确定如何解释第一条记录。

在此处输入图像描述

我不能安全地排除记录,因为 CallTree 中的每个线程都以此帧开头。但困扰我的是为什么帧需要独占 181 秒以及如何使用 thre 帧。

我应该在 CPU 堆栈中安全地忽略它吗?

它在内部做什么需要时间(因为它显示有这么多的独占时间)?

编辑

如果我在 GroupPats 部分中选择“无组”(即空字符串),则该ntdll!RtlUserThreadStart帧位于末尾(它“几乎不占用” CPU 时间)。还有很多低级函数调用我无法轻松解释,因为它们是在内部调用的,但总的来说它要好得多..

Edit2(用于 usr)

我今天拍摄了 PerfView 会话。它是服务器应用程序,所以有很多线程。所以视图对于单线程来说是可以的,但对我的目的来说不是很有价值。我想基本上看按名称视图,但我很不确定那里的 RtlUserThreadStart 是什么意思..

在此处输入图像描述

4

1 回答 1

1

Windows 线程从一个公共线程启动包装函数开始:Ntdll.dll 中的 RtlUserThreadStart

默认情况下,RtlUserThreadStart 调用的方法会汇总,因为 GroupPats 在 PerfView 启动时设置为“仅我的应用程序”。将其更改为“无分组”或“组模块”(如帮助文件中所述):

在此处输入图像描述

此外,如果您在方法名称中看到问号,您可以查找这些符号,以便名称变得有意义。

在此处输入图像描述

于 2019-09-06T13:46:05.980 回答