Golang描述了用于培训目的的简单示例

时间:2015-11-05 16:11:25

标签: go profiling pprof

我正在我公司做Go培训,我想以最好的方式提供pprof包。我认为我的例子不足以简单地呈现pprof的力量。我想只使用go std库。代码应该给我 带有一些瓶颈的简化调用图。

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

ppfof all

仅适用于handler()函数的Pprof

enter image description here

1 个答案:

答案 0 :(得分: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))
}