我正在公司里进行Go培训,我想以最好的方式介绍pprof软件包。我认为我的示例不足以仅仅介绍pprof的功能。我只想使用std库。代码应该给我
带有某些瓶颈的简单调用图。
我当前的工作流程如下:
1.在Web服务器中包含pprof
2.运行网络服务器(它将收集数据30秒钟(默认))
3.运行一些curl镜头到web服务器
4.呈现pprof图
我的代码如下所示:
package main
import (
"fmt"
"net/http"
_ "net/http/pprof"
)
func handler(w http.ResponseWriter, r *http.Request) {
for i := 0; i < 100000000; i++ {
w.Write([]byte(fmt.Sprintf("%d - %d, ", i, i)))
}
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
不过滤的Pprof
Pprof仅用于handler()函数
最佳答案
字符串串联怎么样?它在我的机器上产生一个相当线性的图。此外,这是一个很好的方法,可以教人们为什么应该通过附加[]byte
而不是串联字符串来创建字符串,从而产生大量垃圾。
func handler(w http.ResponseWriter, r *http.Request) {
var s string
for i := 0; i < 100000; i++ {
s += strconv.Itoa(i)
}
w.Write([]byte(s))
}