我正在公司里进行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

go - Golang概要分析简单示例,用于培训-LMLPHP

Pprof仅用于handler()函数

go - Golang概要分析简单示例,用于培训-LMLPHP

最佳答案

字符串串联怎么样?它在我的机器上产生一个相当线性的图。此外,这是一个很好的方法,可以教人们为什么应该通过附加[]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))
}

10-05 23:01