go tool pprof有一个-call_tree选项,根据-help,应该“创建一个上下文相关的调用树”。但是,pprof -tree在 CPU 配置文件上,无论有无此选项,我都能得到完全相同的输出。它看起来像这样(一个代表节点):
flat flat% sum% cum cum% calls calls% + context
----------------------------------------------------------+-------------
0.07s 35.00% | google.golang.org/grpc/internal/transport.(*http2Server).operateHeaders
0.04s 20.00% | golang.org/x/net/http2.(*Framer).readMetaFrame
0.02s 10.00% | github.com/Shopify/sarama.(*FetchResponse).decode
0.06s 0.79% 51.18% 0.20s 2.63% | runtime.mapassign_faststr
0.05s 25.00% | runtime.newobject (inline)
0.03s 15.00% | aeshashbody
0.03s 15.00% | runtime.mallocgc
这显然不是一棵树,尤其是因为它显示了在 HTTP/2 下的 Sarama——从 Kafka 消费(通过 Sarama)和提供 HTTP/2 是这个过程同时执行的两个独立的事情。
为什么不-call_tree影响这个输出-tree?一般来说,-call_tree做什么?
额外学分
我上面显示的输出节点的确切含义是什么?这是否意味着包含 35% 的样本mapassign_faststr也包含operateHeaders在堆栈的某个位置,而 10% 包含decode?下面的行呢,例如mallocgc?
我可以阅读哪些文件来回答上述问题?
犯罪嫌疑人X
相关分类