问题标签 [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.

0 投票
0 回答
276 浏览

debugging - PerfView 中的“退出代码 1”是什么意思?

我尝试在 PerfView 中拍摄给定进程的堆快照。我选择了具有 144GB 可用空间的磁盘上的文件,在拍摄快照时,据报告该过程占用了 3GB 的 RAM,我选择使用 Microsoft 符号。

经过一段时间的工作(即拍摄快照),我没有得到带有转储的文件,并且在主窗口中我看到状态错误,指出“HeapDump 失败,退出代码为 1”。问题我不知道这个错误是什么意思以及如何解决这个问题。

0 投票
0 回答
332 浏览

c++ - TdhGetEventInformation 返回 1168(未找到) - PerfView 如何获取信息?

我有一个 ETL 文件,我正在尝试使用 OpenTrace 解析它,并在收到回调 EventRecordCallback 时使用 TdhGetEventInformation 获取信息。

但是,对于我需要的提供者,它总是返回 1168(未找到)。它工作的唯一方法是使用 TdhLoadManifest 加载清单,这样我就可以获得所有信息。但我不明白 WPA 和 PerfView 如何为我的提供者获取所有事件,即使我没有提供清单......

我发现 TDH.dll 有一些 PerfView 使用的未记录函数,例如 TdhGetAllEventsInformation,我尝试通过使用 LoadLibraryEx 加载 DLL 来使用此函数,该函数再次返回 1168..

以下代码主要来自 Microsoft 示例:

我真的很想知道 PerfView 如何在没有清单的情况下获取这些信息。到目前为止,我看到他们使用 TdhGetAllEventsInformation 但我一直收到 1168,我错过了什么?

谢谢。

0 投票
1 回答
123 浏览

debugging - 如何在 WPA 或 PerfView 中查看磁盘是否已满

我正在使用 WPA 和 PerfView 来捕获跟踪以诊断 IIS 服务器挂起的原因。我们有理由相信,当时其中一张磁盘已满

有没有办法在这些工具(WPA、PerfView)中查看磁盘有多满?

我们从该工具中获得了许多有用且详细的信息,但我找不到这个简单的指标。

谢谢!

0 投票
0 回答
403 浏览

.net - 为什么 Perfview 不显示提供者名称、事件名称和消息?

我们正在为我们的应用程序生成一些 etw 日志文件。我使用 Perfview 来读取 .etl 文件。有时 Perfview 会显示如下截图所示的事件。它没有显示正确的提供者名称/事件名称和消息。相反,我可以看到 GUID。我无法找出发生这种情况的情况。我不能怀疑事件源,因为并非所有 .etl 文件都会发生这种情况。 截屏


使用具有以下 MultiFileMB 配置的相同会话生成的 ETL 文件用于生成多个 etl 拆分文件。一些拆分文件显示正确的数据,有些则不如下图所示。

工作和损坏的 etl 文件

我尝试从 Perfview 中转储损坏和未损坏的事件。正确的事件有<PrettyPrint>信息并且TemplateTypeDynamicTraceEventData,但是在损坏的事件中我没有得到<PrettyPrint>信息。也是。TemplateType_UnhandledTraceEvent

倾倒

0 投票
0 回答
199 浏览

c# - 如何禁用 EventSource 事件的堆栈?

使用 .Net Core 3.1

我已经像这样实现了我的事件源:

然后我使用 dotnet-trace 收集跟踪,如下所示:

然后我在 PerfView 中打开跟踪日志并查看我的事件: 使用 dotnet-trace 收集的事件

如您所见,每个事件都包含堆栈。尽管在我的场景中它绝对没用,但它会产生额外的开销。如何禁用堆栈收集?

另一个问题是:是否可以禁用 Microsoft-Diagnostics-DiagnosticSource 提供程序的堆栈?我在 PerfView 日志中看到了类似的内容:

我尝试使用“堆栈”键值对运行集合:

但这并没有影响任何事情。

0 投票
0 回答
148 浏览

c# - 如果 IIS 应用程序池未启用 32 位应用程序,则 ASP.NET 站点内存使用率高达 99%

我们在 8GB 内存的 Windows 服务器 2019 上有一个 ASP.NET MVC3 站点,当我在 IIS 应用程序池上启用 32 位应用程序时,该站点运行良好,w3wp.exe 的 cpu 和内存使用(约 300MB)也很低且正常。但是如果我禁用 IIS 应用程序池的 32 位应用程序,内存使用会上升到 99%。有谁知道为什么?当 perfview 达到 99% 时,我转储了内存,它说 System.Globalization 对象消耗了内存,但我不确定。请帮助,在此先感谢! 内存转储

内存转储2

0 投票
1 回答
418 浏览

asp.net-core - dotnet-trace 仅收集 CPU_TIME 和 UNMANAGED_CODE_TIME

我尝试使用“dotnet-trace collect”在 Ubuntu 上收集我的 ASP.NET Core 3.1 应用程序的分析数据,并使用 PerfView 查看这些数据,但只得到非托管代码结果。

我究竟做错了什么?该应用程序绝对是托管应用程序。谢谢!

在此处输入图像描述

0 投票
0 回答
74 浏览

c# - 使用 Perfview 查找调用次数最多的方法

有没有办法使用 Perfview 工具查找方法调用计数(即在分析期间每个方法被调用多少次的信息)?

我记得在 JetBrains 的 DotTrace 中看到过类似的功能,但不确定它是否存在于 Perfview 中——我怀疑可能是因为 Perfview 总是进行采样,它不能真正准确地跟踪方法调用的数量?

0 投票
1 回答
320 浏览

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 信息 - 我需要尝试使用配置文件,但我无法一直访问计算机。

这是 WPA 的观点: WPF 块 奇怪的方块 Wpr

这是 Windbg 告诉我的关于内存的内容:

数据库

如您所见,.net 仅使用了大约 147MB 的部分,其余 200MB 我不确定。虚拟分配?我以为他们会进入堆部分。

保留的 200MB 也是一个大问题,我会试着找出它为什么会在那里。

dll 无法减少 - 我们都需要它们,特别是当用户同时打开许多插件时。

我想知道这是否是一个已知的 Citrix 问题。尽管我们仍然有 175 MB 可用空间,但我还能做些什么来检查为什么我们会得到这个 OOM?我想不出为什么我们的应用程序一次需要更多。我们没有显示大图片或视频。

我检查了 GDI/Handles/User 对象,一切似乎都还好。他们并不高。

我有但尚未尝试的一个想法是将 GC 设置更改为 Workstation - Concurrent 以查看会发生什么。不确定这是否会有所帮助。

这是堆栈:

和线程:

********** 编辑 ********** 所以,我搜索了位图:

我得到OOM的地方不一定是造成高内存使用的地方,但无论如何:

谢谢,马可

0 投票
0 回答
30 浏览

.net - Task.ContinueWith 上有很多 CPU 时间?

我正在使用 PerfView 对 .NET Framework WebServer 进行 CPU 分析,我注意到很多 CPU 时间直接在System.Threading.Tasks.Task.ContinueWith. 这是什么意思?我应该担心吗?