1

我正在我的公司进行 Go 培训,我想以最好的方式展示 pprof 包。我认为我的例子不足以简单地展示 pprof 的力量。我只想使用 go std 库。代码应该给我更简单的调用图,但有一些瓶颈。

我当前的工作流程如下: 1. 在 webserver 中包含 pprof 2. 运行 webserver(它将收集数据 30 秒(默认)) 3. 向 webserver 运行一些 curl 镜头 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

全部

仅用于 handler() 函数的 Pprof

在此处输入图像描述

4

1 回答 1

1

字符串连接怎么样?它在我的机器上生成了一个相当线性的图。此外,这是教人们为什么应该通过附加[]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))
}
于 2015-11-05T16:27:20.170 回答