问题标签 [xperf]
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.
windows - 如何在 64b 操作系统上执行 Xperf 调用堆栈捕获?
我已经从 Windows SDK 安装了 Xperf 性能分析器,并使用以下命令捕获了文档中描述的跟踪:
尽管如此,堆栈跟踪不包含任何调用堆栈数据。
我的平台是 Vista 64b。在 64b Windows 上捕获调用堆栈是否需要任何特殊设置或技巧?
windows - 使用 xperf 获取符号
我通读了文档并使用了概述的命令,但是由于某种原因,我似乎没有得到任何符号,只是汇总表的函数列中的一系列“未知数”,除了我正在尝试的应用程序的最顶层集调试....我将环境变量设置为 microsoft 服务器和包含应用程序 pdb 的目录。我还确保在调出汇总表之前选择“加载符号”项。
根据我正在阅读的信息,表格在加载符号时应该需要一些时间才能显示,但是对我来说,表格几乎立即显示并且只有 sprite.exe->sprite.exe 中最上面的项目具有函数名称,函数的其他行是空白或“未知”
我正在使用 Vista SP1。
这是我使用的批处理文件。我做了什么会阻止符号被加载的事情吗?
windows - xperf 无法加载我的 DLL 的符号
我正在尝试使用 xperf 来分析我的 DLL,但它拒绝使用我的 DLL 的 PDB 文件。使用 -symbols 在 .etl 上运行 xperf,我得到:
这让我相信它认为我的 PDB 与应用程序正在使用的 DLL 不匹配。这是错误的;它确实匹配。我已经使用 procexp 确认了应用程序链接的 DLL 的路径,完全重建了项目,等等。它仍然认为它不匹配。
关于什么可能是错误的任何想法?
memory - 如何使用 xperf 的堆分析工具跟踪自定义分配器?
xperf(Windows 性能分析工具包的一部分)通过其堆分析非常有助于跟踪内存使用情况。但是,我的应用程序使用自定义分配器——它直接通过 VirtualAlloc 获取块并管理自己的堆。我想生成 HeapAlloc/HeapFree/等。事件来自我自己的分配函数,这样我就可以按原样使用这些工具,而不必定义一堆自定义 ETW 事件。是否有可能做到这一点?
xperf - XPerfView 加载符号很慢
我正在尝试使用 Xperf 执行堆栈遍历,使用的批处理文件类似于使用 xperf 获取符号中列出的批处理文件。
我启动 XperfView,确认符号路径正确,然后加载符号。但是,当我尝试在“CPU 采样”图表的选定部分(5 秒左右)上打开汇总表时,性能分析器会挂起(无响应)很长时间(几小时)。
我昨晚让它运行,今天早上我进来时,汇总表终于加载了,包含预期的结果......我以为它可能只是执行初始下载以将符号缓存到 C:\symbols,但是今天早上的重复测试有类似的问题(此时挂起 1 小时 15 分钟)。
resource-leak - 通过“系统”进程诊断 100% CPU 使用率的原因
我有一个 Windows 服务器应用程序,使用 Win32 API 在 C++ 中实现,它执行大量串行和 TCP/IP 通信。随着它的运行,CPU 使用率逐渐增加,直到达到 100%。任务管理器表明大部分 (>75%) 的 CPU 使用率是由“系统”进程使用的。如果我杀死我的服务器进程,那么 CPU 使用率就会恢复正常。
是否有任何“简单”的方法可以准确诊断问题所在?
我怀疑 I/O 连接正在打开并且从未关闭,因此操作系统花费越来越多的时间来服务这些请求,但我想在尝试解决问题之前验证情况是否如此。
更新:玩弄之后xperf
,我发现 System 进程有一半以上的时间花在ntoskrnl.exe!KxWaitForSpinLockAndAcquire
. 我对此一无所知,但该函数的名称向我表明可能存在死锁/争用问题。
System 经常使用的其他功能包括NETIO.SYS!FilterMatchEnum
、NETIO.SYS!MatchConditionOverlap
、NETIO.SYS!IsFilterVisible
和MpNWMon.sys!NetFlowUpendByCompletionHandle
。
sdk - Xperfview:CPU 采样和 CPU 使用率有什么区别?
这个问题与 xperf 和 xperfview 相关,它们是 Windows Performance Toolkit 的一部分(又是 Windows SDK 7.1 的一部分)。
比较两个图表,“按线程的 CPU 采样”和“按线程的 CPU 使用率”,有几个我不明白的区别。我将使用 audiodg.exe 作为示例。
在 Threads 下拉菜单中,CPU Sampling 图表上只有一个用于 audiodg 的线程;CPU 使用情况图表显示了几个 audiodg 线程。
两张图都有一个标记为“使用百分比”的 Y 轴,但测量值不同。通常,CPU 采样图表上给定线程的百分比使用率低于 CPU 使用率图表上的百分比。
CPU 采样汇总表显示每个模块/进程的重量和重量百分比。如果我加载符号,我可以深入研究 audiodg 过程。CPU 调度聚合摘要表(从 CPU 使用情况图表启动)显示 CPU 使用情况和 % CPU 使用情况——权重不可用。(相反,CPU 使用情况在 CPU 采样汇总表中不可用。)我无法深入研究 audiodg——我只看到主线程和几个 ntdll.dll 线程。
% CPU 使用率和 % 权重列中任何进程的数字总是不同的。有时它们的差异超过 75%。
所以我的问题......这里的CPU使用率的可靠衡量标准是什么?CPU Usage 数字不是来自 CPU Samples 吗?这些数字不应该以某种方式相关吗?
windows - XPerfViewer 与新的 Storport 提供程序?
有谁知道使用 XPerfViewer(或任何其他工具)从新的 Storport 提供程序解析磁盘延迟信息的方法?
我使用以下文章来捕获跟踪:http: //blogs.msdn.com/b/ntdebugging/archive/2010/04/22/etw-storport.aspx
这确实给了我一系列 .etl 格式的事件,XPerfViewer 将随着时间的推移将这些事件绘制为点,但我希望得到磁盘延迟的图表。延迟信息在事件中,但除了逐个筛选事件之外,我想不出一种将其拉出并显示它的好方法。
有任何想法吗?
wpf - 使用 XPerf.exe 获取 WPF ETW 事件
我无法确定提供给 XPerf.exe 以使其加载 WPF ETW 提供程序的命令行开关和参数的正确组合(Microsoft-Windows-WPF?a42c77db-874f-422e-9b44-6d89fe2bd3e5?E13B77A8-14B6-11DE -8069-001B212B5009}?)并监听特定事件(WClientInputMessage)。
任何人都可以对这应该如何看待有任何见解吗?零散的文档片段(包括http://windowsclient.net/wpf/white-papers/event-tracing-wpf.aspx)和神秘的“xperf -help start”文本似乎是任何知识的荒地。
windows - perfmon 性能计数器是否基于与 xperf 使用的 ETW 事件“底层”相同的东西?
我最近开始熟悉 perfmon 和 xperf。Perfmon 使用性能计数器,而 xperf 使用 ETW(Windows 事件跟踪)。Perfmon 具有提供数据的对象,而 xperf 使用“提供者”组。作为该领域的新手,我想问是否有人能告诉我 perfmon 使用的性能计数器是否真的基于与 xperf 使用的 ETW 事件相同的东西,如果是这样,你能否明确联系。如果它们不是基于同一件事,您能解释一下它们有何不同吗?