问题标签 [pprof]
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.
go - 为什么在多 goroutine 中读写 slice 的成本很高?
我写了一个多协程版本的mergeSort by go,我也写了一个基准测试。现在我想使用“go tool pprof”来分析我的代码的瓶颈。
当我得到 cpu 配置文件时,我在 pprof 中使用“top10”来获得以下输出:
从上面,我认为奇怪的瓶颈在sort.Merge,所以我使用“list Merge”来深入研究方法,我发现了以下信息:
让我感到困惑的是这里!在 Merge 方法中,有 4 个 for 循环。第一个 for 循环和第四个 for 循环的规模大致相同,它们的任务都是将元素从一个切片移动到另一个切片。问题是为什么第一个 for 循环花费这么多(1.58s 加 1.52s),而第四个 for 循环花费这么少(只有 170ms)?是反直觉的!
本项目的 github 地址为https://github.com/Duncan15/talent-plan/tree/master/tidb/mergesort。您可以使用“make pprof”运行基准测试并获取 cpu 配置文件和内存配置文件。
我想知道为什么会这样,如果你有时间,请阅读我的代码并给我一些建议。
谢谢你告诉我!!!
我已经编写了一些代码来验证当 Merge 方法在单 goroutine 环境中运行时,第一个 for 循环的成本与第四个 for 循环的成本大致相同,这看起来很直观。所以我想是不是多goroutine环境造成了上述现象。但是在多协程环境中,Merge 方法是并发运行的。也就是说,第1个for循环和第4个for循环同时运行,如果同时读写slice会增加开销,那么第4个for循环的开销也会增加,但是从pprof的输出中我们可以发现只有第1个for-loop的成本增加!
我还写了另一个测试来验证我的想法。您可以使用“make vet”来运行它。此测试同时运行 Merge 方法。与多协程版本的mergeSort不同的是,这个测试没有排序的代码,只有合并的代码。而且我惊讶地发现,在这个测试中,第一个 for 循环的成本与第四个 for 循环的成本大致相同。所以最后我完全糊涂了!
go - 什么会导致 go 在 runtime.pthread_cond_signal 上花费这么多时间
我在 go 中编写了一个多 goroutine 基准测试。我使用 go tool pprof 来分析如何优化我的代码。当我使用 top10 显示一些信息时,我得到了以下输出:
很明显,runtime.pthread_cond_signal 在我的代码中花费了很多时间。我尝试用谷歌搜索一些关于 runtime.pthread_cond_signal 的可用信息。但未能得到他们。尽管有些帖子提到了它,但它们只是提供了一些提示,让我仍然对此感到困惑。
我想这种情况是相对于 Go 中频道的使用情况,但我不确定我的意见,我也不知道一些细节。
我想知道的是:
什么会导致 go 通常在 runtime.pthread_cond_signal 上花费这么多时间?
正常情况下,遇到这种情况如何优化你的go代码?</p>
随时提供任何信息和建议。我很高兴收到您的任何帮助。
go - go tool pprof 无法为本地库设置二进制路径
他们试图对我们正在尝试优化的服务器代码的一部分进行 pprof 转储。我没有使用net/http/pprof
,而是依赖runtime/pprof
. 我的整个设置工作正常,我可以在服务器机器上使用 pprof 转储。
但是,当我scp
将 pprof 转储到本地计算机时 - 为了使用,web
因为我不想在我的服务器上安装 graphviz,pprof 开始向我显示此警告:
我从服务器复制了原件bin
并尝试设置PPROF_BINARY_PATH
. 但这仍然无济于事。我在这里做错了什么?
go - 如何持续分析我的 Go 应用程序?
我的应用程序有一些内存泄漏,这使应用程序经常崩溃。所以我开始使用 pprof 分析我的应用程序,但我只能在我点击 url 的实例中获取配置文件。有什么方法可以每隔一段时间找到配置文件,以便我可以分析应用程序发生了什么?
go - 如何计算 pprof 输出并避免 pprof 丢弃其 cum 小于 0.10s 的节点
我试图弄清楚 pprof 如何计算我的 Go 应用程序输出中每个节点的 %cum。我附上了我的 pprof png 输出的一部分,以强调我试图找出pprof png 输出的问题 在 pprof 输出的这一部分中有两个节点:
节点 A) 运行时扫描对象 -
持平=1.06s %持平=5.54%
兼=1.64s %兼=8.57%
节点 B)运行时 findobject(由 scanobject 调用)-
持平=0.46s %持平=2.4%
兼=0.54s %兼=2.82%
不管如何计算累积 A,这些数字总和不等于 func A 累积(1.64 秒):
A 平 + B 平 = 1.06s + 0.46s = 1.52s
A flat + B cum = 1.06s + 0.54s = 1.6s
可以解释这种差异的一件事是 pprof 丢弃小于 0.10 秒的累积,因此可能是 pprof 输出中缺少与节点 A 相关的次要函数。如果这是根本原因,我想知道是否有办法告诉 pprof 进行完整的 pprof 输出
谢谢
c++ - 使用 bazel 构建的二进制文件在 pprof 中查看源代码
我正在尝试分析我在 bazel 下使用pprof
. 我能够生成配置文件,但是当我在 Web UI 中查看它时,我无法在源代码视图中看到我的代码。我看到??
的是 s。
以下是我正在使用的命令:
如何访问源代码信息?
go - 了解 Go pprof 统计信息
我正在学习 Go Profilig 的工作原理。所以我做了下面的例子
然后我跑
和
我得到的是
为什么我得到1.61GB
分配?是不是太多了?如何检查一个函数运行内存分配是什么?
go - `go tool pprof` - 使用 go 模块时如何指定源?
我最近切换到 go 模块,我似乎无法pprof
识别源文件。也许这里有人知道怎么做?
我尝试使用-source_path
and-trim_path
选项,但我不知道如何使它工作。
有趣的是,o
在交互模式下键入会pprof
显示trim_path
选项而不是source_path
.
只是为了确定:pprof
是否可以使用本地模块并在堆栈跟踪中显示它们的源,对吗?