标签: flamegraph

linux的perf实用程序如何理解堆栈跟踪?

Brendan Gregg使用Linux的perf实用程序为c/c ++,jvm代码,nodejs代码等生成火焰图.

Linux内核本身是否了解堆栈跟踪?在哪里可以阅读更多关于工具如何能够反省到流程的堆栈跟踪,即使流程是用完全不同的语言编写的?

linux-kernel perf flamegraph

13
推荐指数
1
解决办法
6382
查看次数

Chrome 时间线不会在火焰图上显示所有调用

在使用 Google Chrome 时间轴功能时,我注意到一件奇怪的事情。在我的 PC 上,工作场所火焰图非常平坦,仅显示 1-2 个深度的函数调用。我的第一个想法是:“嗯,这就是这件事的运作方式”。但是当我从家里打开同一个 web 应用程序时,火焰图要高得多,显示了所有的函数调用。

两个浏览器的版本相同(51.0.2704.84 m - 目前最新)。DevTools 中的所有设置都是相同的。

工作中电脑的火焰图: 个人电脑

家里电脑的火焰图: 笔记本电脑

我的问题很简单:为什么工作中的计算机没有显示完整的调用图,我该如何解决这个问题?

timeline google-chrome flamegraph

6
推荐指数
1
解决办法
611
查看次数

如何解释铬火焰图中的差距

我正在努力更好地理解如何解释铬火焰图表.
在下面的图表_changeHandler中显示为四个不同的块.但事实上,我知道它只被召唤一次.

我在这里看到了一个类似的问题,声称这可能是一个错误,但那是四年前:
这个差距在Chrome devtools配置文件火焰图中意味着什么

在此输入图像描述

问题:
在哪种情况下,chrome perf工具会在同一函数调用的火焰图中显示间隙?

真正的问题是它确实使整个图形无效.图形的底部碎片但顶部部分是相同的功能.我根本无法弄清楚如何理解这一点.

使用cpu限制时,问题会变得更加严重.看第二张图片,它与第一张图片的操作相同,但cpu限制设置为5倍减速.
"函数调用"下的碎片条是单个函数调用,由于某种原因,它在数百个部分中被分割.

在此输入图像描述

javascript google-chrome-devtools flamegraph

5
推荐指数
1
解决办法
891
查看次数

从特里构建火焰图

我在定期生成的特里中有一些统计数据。我想根据两次尝试之间的差异生成火焰图。我怎么做?

t = pygtrie.StringTrie(separator=os.path.sep)

for dirpath, unused_dirnames, filenames in os.walk(ROOT_DIR):
    for filename in filenames:
        filename = os.path.join(dirpath, filename)
        try:
            filestat = os.stat(filename)
        except OSError:
            continue
        if stat.S_IFMT(filestat.st_mode) == stat.S_IFREG:
            t[filename] = filestat.st_size
Run Code Online (Sandbox Code Playgroud)

python algorithm trie flamegraph

5
推荐指数
1
解决办法
187
查看次数

Dataloader 的 PyTorch 自定义数据集分析

我实现了一个自定义 PyTorch 数据集,供项目的数据加载器使用。然而,它的运行速度比预期慢,因此选择分析来解决瓶颈问题。

研究了 vprof,但如果我只对分析数据集实现感兴趣,我不确定要分析的函数。在 Ubuntu 18.04 上使用 PyTorch 1.5 和 Python 3.7。

我们如何仅对自定义数据集实现执行性能分析(CPU 和内存)?

谢谢!

python profiling python-3.x flamegraph pytorch

5
推荐指数
0
解决办法
439
查看次数

为什么 Java 飞行记录仪采集的样本太少?

我们的应用程序性能不佳,因此我们使用飞行记录器的方法分析来查看时间花在哪里。它基本上可以工作,但是一分钟的记录中采集的样本数量远低于 100 个。(使用“分析”预设)

我使用了一个简单的示例应用程序(对随机数求和)进行比较,一分钟或记录生成约 6000 个样本 - 这对我来说似乎是正确的。

首页上有几个警告,例如:内存消耗高,异常异常。但该应用程序基本上可以正常工作,因此这可能是一个转移注意力的事情。

我已经通过增加数量解决了“堆栈深度截断”问题。

我的猜测:要么飞行记录器配置错误,要么时间实际上没有花在代码上而是花在其他任务上。cpu 在运行期间非常繁忙,所以我不认为所有线程都在等待。

请让我知道哪些信息可能很重要,以便我可以添加它们。

(这是一个用 Scala 编写的 Web 框架库,使用 Jetty 作为 Web 服务器;Oracle JDK 8)

performance flamegraph

5
推荐指数
1
解决办法
3239
查看次数

如何借助 FlameGraph 中显示的钩子编号/索引找出哪个钩子已更改

我正在开发一个反应应用程序并希望提高性能。我使用 Profiler 来查看每个渲染上绘制的组件,还使用 ​​FlameGraph 来找出哪个组件花费了很长时间。

在火焰图中,它显示了有关何时以及为何渲染组件的详细信息,因为它具有“ Why did this render?”(为什么要渲染?)部分并显示一些挂钩已更改。但这并没有显示钩子名称,而是显示了钩子的编号/索引。钩子是如何编号的?以及如何借助这些数字/索引知道确切的钩子名称。 Flamegraph 中渲染的组件信息

performance profiler reactjs flamegraph react-hooks

5
推荐指数
1
解决办法
2773
查看次数

如何使用Java Flight Recorder避免截断的堆栈跟踪

我正在使用Oracle Java Flight Recorder来收集Java应用程序的堆栈跟踪示例.这些堆栈跟踪允许我最终生成CPU Flamegraph.

我的问题是Java Flight Recorder会截断超过64帧的堆栈跟踪.在Flamegraph中很容易观察到并且使用调试器我可以观察到没有FLRStackTrace超过64 FLRFrame秒且几乎所有64帧的堆栈跟踪都将其TruncationState设置为TRUNCATED.

有谁知道这64帧限制是否可以增加?如果堆栈跟踪不完整,则Flamegraphs无用.

java jvm jmc flamegraph jfr

3
推荐指数
1
解决办法
367
查看次数

如何将 0x(用于 Node.js 分析)与 TS-Node 结合使用?

我正在使用 ts-node 执行用 TypeScript 编写的脚本。我想使用0x检查火焰图。这是我使用 ts-node 执行的当前命令:

> ts-node -r tsconfig-paths/register scripts/my-script.ts

如何使用 0x 捕获脚本执行的火焰图?或者,是否有另一种方法来捕获执行代码的火焰图?

node.js typescript flamegraph ts-node

2
推荐指数
1
解决办法
1984
查看次数