登录
首页 >  Golang >  Go问答

展示pprof中每个函数的调用树方法

来源:stackoverflow

时间:2024-02-25 21:48:23 501浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《展示pprof中每个函数的调用树方法》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在尝试从 https://github.com/greenplum-db/gpbackup 获取 gpbackup 的完整调用树。我使用runtime/pprof,而不是net/http/pprof,所以据我所知,收集统计数据不应该有任何时间限制。我在程序的一开始就启动 pprof 服务器,并在 os.Exit() 命令之前停止它。为了收集统计信息,我运行 gpbackup,它按预期工作,并且我得到 cpu.prof 输出。然后我使用 pprof --nodecount=100000 gpb cpu.prof 并使用 png 命令生成调用树。问题是调用树缺乏大量函数。例如,DoBackup() 从记录函数开始,但它们在调用树中缺失,并且还有许多其他函数似乎也没有出现。如何让 pprof 显示调用树中的每个调用?


正确答案


默认情况下,pprof removes nodes 的 CPU 时间少于 0.5%,边缘的 CPU 时间少于 0.1%。您可以通过提供 -nodefraction=0-edgefraction=0 标志来要求 pprof 不要执行此操作,这可能会解决您的问题。

据我所知,收集统计数据不应该有任何时间限制

不完全正确,runtime/pprof samples 100 times per second。每次采样时,它都会捕获完整的堆栈跟踪。因此,如果函数执行速度超过百分之一秒并且不属于运行时间较长的函数的堆栈框架的一部分,您可能会错过它们。

您可以复制 StartCPUProfile 并更改 hz 变量,以便更频繁地捕获。

以上就是《展示pprof中每个函数的调用树方法》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>