【问题标题】:Why does tracing C# code in Linux fail when imported into speedscope?为什么在 Linux 中跟踪 C# 代码在导入 speedscope 时会失败?
【发布时间】:2020-11-11 04:09:04
【问题描述】:

背景:

我有一段代码运行得很慢,因此建议我对代码进行分析以找出原因。

下图显示了在 Linux 上运行的 Visual Studio Code,我使用下面的几个 dotnet 命令来创建 trace.nettracetrace.speedscope.json 文件:

然后我尝试将trace.speedscope.json 文件导入https://www.speedscope.app/ 并收到以下错误:


命令:

我使用以下页面作为创建跟踪 speedscope 文件的指南:

https://github.com/jlfwong/speedscope/wiki/Importing-from-.NET-Core

具体来说,我使用的命令是:

dotnet trace collect -p <process id> --format speedscope


示例:

可以在此处查看生成的 speedscope 跟踪文件示例:

https://pastebin.com/4WW2tbiF


问题:

如何创建适用于 https://www.speedscope.app/ 的 speedscope 跟踪文件?

【问题讨论】:

  • click here to load an example profilespeedscope.app 网站上是否适合您?您可以将一些示例跟踪文件 (trace.speedscope.json) 上传到互联网吗?
  • @osgx,是的,示例配置文件工作正常。我在这里上传了一个示例跟踪文件:pastebin.com/4WW2tbiF
  • 你的错误信息是Importing as speedscope json file. Failed to load format Error: Tried to leave frame "*" while frame "*" was at the top at,一些相关问题:github.com/dotnet/diagnostics/issues/1206github.com/microsoft/perfview/issues/1178
  • @osgx,根据这些链接,记者似乎正在等待发布带有修复程序的新版本。似乎我必须等待新发布的版本才能开始分析我的应用程序。感谢您的帮助。
  • github.com/jlfwong/speedscope/releases/download/v1.5.3/… 下载的旧版 speedscope 确实可以让我打开您的跟踪 json 文件。 5 个线程是可见的,带有 4、5 或 7 秒的跟踪日志。什么都不懂。但是在网络控制台中,我有“speedscope v1.5.3 Importing as speedscope json file import: 207ms - timer ends” from speedscope.75eb7d8e.js + import.a03c2bef.js

标签: c# linux .net-core visual-studio-code profiling


【解决方案1】:

您的命令(基于manualscreenshot

$ dotnet tool install --global dotnet-trace
$ dotnet trace collect -p <process id> --format speedscope
No profile or providers specified, defaulting to trace profile 'cpu-sampling' 
Provider Name Level Enabled by 
Microsoft-DotNETCore-SampleProfiler Informational(4) --profile 
Microsoft-Windows-DotNETRuntime Informational(4) --profile 

Process: /Code/mysql-insert-1234/bin/Debug/netcoreapp3.1/mysql-insert-1234 
Output File: /Code/mysql-insert-1234/trace.nettrace

[00:00:00:02] Recording trace 2.0604 (MB) 

Press <Enter> or <Ctrl+C> to exit... Trace completed.
$ dotnet trace convert --format speedscope trace.nettrace 
Writing: /Code/mysql-insert-1234/trace.speedscope.json 
Conversion complete

您来自 screenshot 的错误消息(从您的原始 json 文件复制的类似错误):

speedscope v1.8.0  
Importing as speedscope json file 
Failed to load format error: Tried to leave frame "AppendExtraBuffer" while frame "TryGetValue" was at the top at 31.8
 at n._leaveFrame (160)
 at n.leaveFrame (160)
 at speedscope.js:166
 at a (166)
 at speedscope.js:166
 at Array.map (<anonymous>)
 at s (166)
 at import.js:111
 at Generator.next (<anonymous>)
 at s (import.js:111)

基于“错误:试图离开框架”错误片段,我能够找到两个类似错误的报告:

https://github.com/dotnet/diagnostics/issues/1206

dotnet-trace:speedscope.app 显示错误,显示加载格式失败错误:试图离开帧 #1206 已关闭 mcraiha 于 2020 年 6 月 6 日开设了本期 ... josalem 于 2020 年 6 月 17 日发表评论

看起来这是由 Speedscope 最近的更改 (jlfwong/speedscope#273) 导致的错误,该更改决定更改行为并在某些排序约束上严重失败。我将看看我们在 Microsoft/PerfView 中的转换逻辑,看看我是否能找出导致排序问题的原因。

Microsoft/PerfView 中的问题:microsoft/perfview#1178。 根据这里的 cmets,看起来我们应该能够通过选择最新的 TraceEvent 版本来解决这个问题。

adamsitnik 于 2020 年 6 月 18 日发表评论 我提供了一个修复microsoft/perfview#1212

noahfalk 于 2020 年 7 月 6 日 #1313 关闭了此

https://github.com/microsoft/perfview/issues/1178

导出到 speedscope 有时会出现不对称的打开/关闭帧事件顺序 #1178 打开 jlfwong 2020年5月23日开本期·8 cmets

所以据说这个错误与https://github.com/jlfwong/speedscope/pull/273 speedscope 的更新有关(“jlfwong 将 2 个提交从 jlfwong/fail-unmatched-loudly 2020 年 5 月 23 日合并到 master”)which was included 到 v1.6.0(5 月 31 日) , 2020) 版本的 speedscope.app。我可以建议您尝试使用早期版本的 speedscope 来解析此文件(从 2020 年 1 月 16 日开始的 v1.5.3)或获取更新版本的 perfview(应用 https://github.com/microsoft/perfview/pull/1212 提交)。

speedscope app有precompilerd离线版本:https://github.com/jlfwong/speedscope/releases - 从https://github.com/jlfwong/speedscope/releases/download/v1.5.3/speedscope-1.5.3.zip获取pull/273更新前的版本

解压,用浏览器打开 index.html 并加载你的 json 跟踪文件。我能够使用旧版本的 speedscope 从https://pastebin.com/4WW2tbiF 渲染您的示例

不知道如何使用 npm 或更新 microsoft/perfview 或使用未发布版本的 microsoft/perfview。

【讨论】:

猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2013-04-27
  • 1970-01-01
  • 2021-08-20
  • 2019-08-05
  • 1970-01-01
相关资源
最近更新 更多