问题标签 [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.
ubuntu-16.04 - 使用 uber torch 工具在 ubuntu 中为 CPU 分析生成火焰图时发生错误:未找到堆栈计数
图像显示 pprof 命令和 uber-torch 命令来可视化火焰图:
go - 带有 julienschmidtrouter 和基准的 pprof 配置文件不分析处理程序
我正在尝试分析我编写的 Web 服务器,但我的 pprof 不包含有关处理程序 func 的任何数据。
我正在使用 julienschmidt 的httprouter 包,并且想简单地对我的一个处理程序进行基准测试并查看 pprof 配置文件。对于基准测试,我使用go-wrk
我像这样设置我的网络服务器和 pprof:
路由器初始化如下:
我的处理程序看起来像这样:
这个处理程序只是一个测试,我在其中动态地将很多元素附加到一个切片中。这样做的原因是,我想测试这些动态分配是否在 pprof 的堆配置文件中表示。
现在,我所做的是:
- 启动我的服务器
- 在我的终端中 执行go tool pprof http://localhost:6060/debug/pprof/heap
- 然后通过执行go-wrk -no-c -d 5 http://localhost:4000/entities/object/map对我的处理程序进行基准测试
该请求有效,我的基准测试也正确报告了所有内容。但是,当我在 pprof 终端中键入png时,我得到了这个图。
该图不包含有关我的处理程序的任何信息以及我在处理程序中所做的昂贵的堆分配。我究竟做错了什么?
go - golang中将字节[]转换为字符串奇怪占用堆
使用以下代码将字节 [] 转换为字符串时,我发现奇怪的占用堆
没有
fmt.Println(bs)
会逐渐耗尽记忆。工作
fmt.Println(bs)
正常。我不明白发生了什么?我和我一起工作version go1.9.2 darwin/amd64
go - time.Since() 的奇怪行为
我正在运行一个 GO (1.9.2) 程序,我的代码类似于:
(两个 fmt 语句在连续的行上)
我预计打印输出的时间会相似,但这里有一些打印结果:
(3 秒)
(1秒)
(2.5 秒)
两次打印输出之间的时间差始终很高。
这种现象的解释是什么?
额外信息:根据 pprof 的说法,在打印时大约有 15000 个 goroutine 在运行,但其中大多数都在等待套接字上的传入数据。
我运行了代码,GODEBUG=gctrace=1
但没有多少 GC 打印输出,几乎没有我的代码打印输出的数量那么多。
编辑: 似乎将 time.Since() 的结果存储到@Verran 建议的变量中解决了这个问题。
更改为fmt
没有log
帮助,但打印不再同步。
看来“问题”是在fmt
高负载环境中处理的方式。我希望有人能对这里发生的事情有所了解。
go - pprof 用法和解释
我们认为我们的 Go 应用程序存在内存泄漏。
为了找出发生了什么,我们正在尝试使用pprof
.
我们很难理解读数。连接到 时go tool pprof http://localhost:6060/debug/pprof/heap?debug=1
,样本输出为
(请原谅笨拙的混淆)
我们解释funcA
为消耗了近 70% 的内存——但这大约是 12MB。
现在top
虽然显示:
这表明使用了 1.371 GB 的内存....它去哪儿了???
此外,pprof
文档非常节俭。我们甚至难以理解它应该如何使用。我们的二进制文件是一个守护进程。例如:
- 如果我们从 开始阅读
go tool pprof http://localhost:6060/debug/pprof/heap
,这是在这个特定时间一次性阅读还是随着时间的推移汇总? - 有时
text
稍后再次点击interactive mode
似乎会报告相同的值。我们真的在看相同的价值观吗?我们是否需要重新启动go tool pprof...
以获得新的值? - 它是读取整个堆,还是读取堆栈中特定点的某个特定 go 例程....???
最后,这种解释是否正确(来自http://localhost:6060/debug/pprof/):
二进制有 64 个开放的 go 例程和总共 45MB 的堆内存?
go - 通过 http 运行时 pprof 无法找到源文件
我正在使用“net/http/pprof”在远程服务器上运行我的 golang 应用程序的远程分析。
我已经为 go 工具设置了 PPROF_BINARY_PATH 环境变量,以便能够在我的机器上找到我的本地二进制文件。
当我在 go tool pprof cli 中使用“list”关键字时 - 当 go 工具正在寻找 .go 源文件时,我得到一个“没有这样的文件或目录”。
看起来它正在远程机器的 GOPATH 中查找源文件,即“/go/”,而在我的个人机器上,它位于我的主目录中,因此该文件位于 .
当我将所需的源代码文件复制到我的 GOPATH 之外并复制到 go 工具正在搜索的目录时 - “list”关键字按预期工作,但这当然不是最佳的。
c++ - TCMalloc 内存泄漏调试
我已经用 tcmalloc 编译了一个应用程序并使用 HEAPPROFILE 环境变量来获取堆文件
每 10MB 左右就会创建一个新的堆文件,根据 tcmalloc 页面,我可以使用 pprof 工具比较堆文件,并查看哪些是额外的未释放对象(可能泄漏)。
结果是:...总计:4600.7 MB
0x00000000009f1d25 是一个不错的地址,但我无法对这些数据做任何事情。
我尝试在 helloworld 应用程序中运行相同的程序
在这里我们可以清楚地看到,所有的函数都有明确的名称,并且泄漏来自 BigNumber 构造函数。
谁能指出我理解上述地址含义的正确方向?
go - 了解 go pprof 结果
我有 Go 代码,我已经为它编写了单元测试。测试运行 6.5 秒,它会产生巨大的 CPU 负载。我在 docker 容器中运行测试,它的 CPU 使用率达到 400-500%。我得到了 cpuprofile,它显示了以下结果:
我不明白这里的 ExternalCode 是什么。在这个结果中也没有我的实际代码的功能。我知道我的一些函数可能会调用这些内置的 go 东西,最终可能会在那里花费大量时间。但是它并没有给我方向来改进我的代码的性能。这个结果有什么明显的地方需要注意吗?
我尝试list
在 pprof 交互模式下使用命令来显示 CPU 使用率高的功能。
go - Golang pprof full call graph
I'm kinda new to pprof
. I've started CPU profiling, and after a bit of time checked the top25. This is what I got:
I thought that's all cool, I just need to get rid of that time function. Then realized, I don't even use anything from the time pkg, so it must be either a third party lib, or one of the go internal functions.
So I've generated the graph with the -web
flag, so I can see which function calls it, but it doesn't really show directly. Is there any way to track it down where it's coming from?