看着PerfView中CPU栈的快照,我不确定如何解释第一条记录。

我不能安全地排除记录,因为CallTree中的每个线程都以这个帧开始。但是让我困扰的是为什么这个帧独占181秒,以及如何使用这三个帧。
我应该在CPU堆栈中安全地忽略它吗?
它在内部做了什么而占用了时间(因为它显示了如此多的独占时间)?
编辑
如果我在GroupPats部分中选择"no group“(所以是空字符串),那么ntdll!RtlUserThreadStart帧就在末尾(几乎不占用任何CPU时间)。还有很多低级函数调用,我不能解释得很愚蠢,因为它们是内部调用的,但总体上看要好得多。
Edit2 (用于用户)
我今天放弃了PerfView会议。它是服务器应用程序,所以有很多线程。所以这个视图对于单线程来说是可以的,但是对于我的目的来说并不是很有价值。我想基本上按名称视图查看,但我不太确定其中的RtlUserThreadStart是什么意思。

发布于 2019-09-06 21:46:06
Windows线程从一个公共线程启动包装器函数开始: Ntdll.dll中的RtlUserThreadStart
默认情况下,RtlUserThreadStart调用的方法是汇总的,因为GroupPats在PerfView启动时被设置为"Just My App“。将其更改为“无分组”或“分组模块”(如帮助文件中所述):

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

https://stackoverflow.com/questions/36494281
复制相似问题