【发布时间】:2015-02-06 10:09:25
【问题描述】:
更新(2019 年 1 月 24 日):
这个问题在 4 年前被问到关于 Go 1.4 的问题(并且仍在获得意见)。从那时起,使用 pprof 进行分析发生了巨大变化。
原问题:
我正在尝试分析我编写的基于 go martini 的服务器,我想分析单个请求,并获取函数的完整分解及其运行时持续时间。
我尝试同时使用runtime/pprof 和net/http/pprof,但输出如下所示:
Total: 3 samples
1 33.3% 33.3% 1 33.3% ExternalCode
1 33.3% 66.7% 1 33.3% runtime.futex
1 33.3% 100.0% 2 66.7% syscall.Syscall
网络视图也不是很有帮助。
我们定期分析另一个程序,输出似乎是我需要的:
20ms of 20ms total ( 100%)
flat flat% sum% cum cum%
10ms 50.00% 50.00% 10ms 50.00% runtime.duffcopy
10ms 50.00% 100% 10ms 50.00% runtime.fastrand1
0 0% 100% 20ms 100% main.func·004
0 0% 100% 20ms 100% main.pruneAlerts
0 0% 100% 20ms 100% runtime.memclr
我不知道差异来自哪里。
【问题讨论】:
-
您使用什么操作系统进行分析?
-
流浪者。我看到一些争论是否重要,但没有任何结论。我们有一个可以使用的暂存环境,但我是否采用相同的方法?
-
Vagrant 不是操作系统。您确实需要在 Linux 上进行分析,但有一个内核补丁 here 可以使其在 darwin 上运行。我仍然在 OSX 上的 VirtualBox 中使用 LInux 看到过这样的结果(不确定补丁是否有助于这种情况)
-
您当然是对的,我的意思是如果您有任何建议,我可以设置任何我想要的东西 - Ubuntu 值得信赖。我也准备了一个旧的珍宝盒,我可以玩。
-
哦,我错过了你的部分问题——pprof 是一个采样分析器;它不跟踪执行。您需要在负载下分析一段合理的时间才能获得一组具有代表性的样本。
标签: go profiling martini pprof