问题标签 [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.
debugging - PerfView 中的“退出代码 1”是什么意思?
我尝试在 PerfView 中拍摄给定进程的堆快照。我选择了具有 144GB 可用空间的磁盘上的文件,在拍摄快照时,据报告该过程占用了 3GB 的 RAM,我选择使用 Microsoft 符号。
经过一段时间的工作(即拍摄快照),我没有得到带有转储的文件,并且在主窗口中我看到状态错误,指出“HeapDump 失败,退出代码为 1”。问题我不知道这个错误是什么意思以及如何解决这个问题。
c++ - TdhGetEventInformation 返回 1168(未找到) - PerfView 如何获取信息?
我有一个 ETL 文件,我正在尝试使用 OpenTrace 解析它,并在收到回调 EventRecordCallback 时使用 TdhGetEventInformation 获取信息。
但是,对于我需要的提供者,它总是返回 1168(未找到)。它工作的唯一方法是使用 TdhLoadManifest 加载清单,这样我就可以获得所有信息。但我不明白 WPA 和 PerfView 如何为我的提供者获取所有事件,即使我没有提供清单......
我发现 TDH.dll 有一些 PerfView 使用的未记录函数,例如 TdhGetAllEventsInformation,我尝试通过使用 LoadLibraryEx 加载 DLL 来使用此函数,该函数再次返回 1168..
以下代码主要来自 Microsoft 示例:
我真的很想知道 PerfView 如何在没有清单的情况下获取这些信息。到目前为止,我看到他们使用 TdhGetAllEventsInformation 但我一直收到 1168,我错过了什么?
谢谢。
debugging - 如何在 WPA 或 PerfView 中查看磁盘是否已满
我正在使用 WPA 和 PerfView 来捕获跟踪以诊断 IIS 服务器挂起的原因。我们有理由相信,当时其中一张磁盘已满。
有没有办法在这些工具(WPA、PerfView)中查看磁盘有多满?
我们从该工具中获得了许多有用且详细的信息,但我找不到这个简单的指标。
谢谢!
.net - 为什么 Perfview 不显示提供者名称、事件名称和消息?
我们正在为我们的应用程序生成一些 etw 日志文件。我使用 Perfview 来读取 .etl 文件。有时 Perfview 会显示如下截图所示的事件。它没有显示正确的提供者名称/事件名称和消息。相反,我可以看到 GUID。我无法找出发生这种情况的情况。我不能怀疑事件源,因为并非所有 .etl 文件都会发生这种情况。
使用具有以下 MultiFileMB 配置的相同会话生成的 ETL 文件用于生成多个 etl 拆分文件。一些拆分文件显示正确的数据,有些则不如下图所示。
我尝试从 Perfview 中转储损坏和未损坏的事件。正确的事件有<PrettyPrint>
信息并且TemplateType
是DynamicTraceEventData
,但是在损坏的事件中我没有得到<PrettyPrint>
信息。也是。TemplateType
_UnhandledTraceEvent
c# - 使用 Perfview 查找调用次数最多的方法
有没有办法使用 Perfview 工具查找方法调用计数(即在分析期间每个方法被调用多少次的信息)?
我记得在 JetBrains 的 DotTrace 中看到过类似的功能,但不确定它是否存在于 Perfview 中——我怀疑可能是因为 Perfview 总是进行采样,它不能真正准确地跟踪方法调用的数量?
c# - 使用 WinDbg 和 wpr 调试 OutOfMemory 异常。为什么这些符号显示为?!?- jited .net?
我一直在试图理解为什么我们会在 Citrix - Windows 10 下获得 OOM,尽管它没有发生在“普通”机器上。我们的应用程序混合了原生 C++、C# 和 Web 浏览器插件。容器是.net。
详细信息:Windows 10 版本 18363 MP(2 个过程)免费 x86 兼容产品:WinNt,套件:SingleUserTS 18362.1.wow64fre.19h1_release.190318-1202
WinDbg 的异常
OOM 出现在 .Net 上,有时应用程序继续工作!其他时候,我在 taskmanager 上的内存使用量约为 700MB 时就遇到了异常,这真的很奇怪。
收到异常后,我设法在 taskmanager 上运行 PerfView 并强制执行 GC,将其从 > 750MB 降至 350MB。不知何故,我觉得 GC 在 Citrix 下没有按预期工作。
与开始相比,PerfView 实际上显示了非常少量的遗留对象。
Vmap 还在堆上显示了许多 ~75MB 块 - 我猜这是来自 .Net,但是“?!?” 打扰我。我的猜测是基于我在 PerfView 上强制执行 GC 并且这些块已经消失的事实。此外,我在 WPA 中看到的 WPF 块的线大小与此相同?!?堵塞。这不可能是巧合。
我什至尝试使用 wpr 找出导致错误的原因,我可以看到 .net 上的 WPF 正在分配 ~75MB 块,这很奇怪?!?以及 - 我想这是 jitted 代码。我几乎有所有可用的符号,但仍然没有运气 - ?1?留在那里。也许 wpr 没有保存 .Net 信息 - 我需要尝试使用配置文件,但我无法一直访问计算机。
这是 Windbg 告诉我的关于内存的内容:
如您所见,.net 仅使用了大约 147MB 的部分,其余 200MB 我不确定。虚拟分配?我以为他们会进入堆部分。
保留的 200MB 也是一个大问题,我会试着找出它为什么会在那里。
dll 无法减少 - 我们都需要它们,特别是当用户同时打开许多插件时。
我想知道这是否是一个已知的 Citrix 问题。尽管我们仍然有 175 MB 可用空间,但我还能做些什么来检查为什么我们会得到这个 OOM?我想不出为什么我们的应用程序一次需要更多。我们没有显示大图片或视频。
我检查了 GDI/Handles/User 对象,一切似乎都还好。他们并不高。
我有但尚未尝试的一个想法是将 GC 设置更改为 Workstation - Concurrent 以查看会发生什么。不确定这是否会有所帮助。
这是堆栈:
和线程:
********** 编辑 ********** 所以,我搜索了位图:
我得到OOM的地方不一定是造成高内存使用的地方,但无论如何:
谢谢,马可
.net - Task.ContinueWith 上有很多 CPU 时间?
我正在使用 PerfView 对 .NET Framework WebServer 进行 CPU 分析,我注意到很多 CPU 时间直接在System.Threading.Tasks.Task.ContinueWith
. 这是什么意思?我应该担心吗?