美文网首页
Golang 使用pprof分析性能

Golang 使用pprof分析性能

作者: 合肥黑 | 来源:发表于2019-04-02 17:50 被阅读0次

    参考
    Golang 使用pprof分析goweb的性能问题

    go的pprof可以用来对服务的性能进行检测,其中net/http/pprof包用来检测web服务器的相关的性能的分析,包括goroutine的数量,heap的大小问题。

    一、简单使用
    package main
    import (
        "fmt"
        "log"
        "net/http"
        _ "net/http/pprof"
        "time"
    )
    
    func main() {
        // 开启pprof
        go func() {
            log.Println(http.ListenAndServe("localhost:6060", nil))
        }()
        go hello()
        select {}
    }
    func hello() {
        for {
            go func() {
                fmt.Println("hello word")
            }()
            time.Sleep(time.Millisecond * 1)
        }
    }
    
    

    如上所示,实现了一个简单函数,在for循环内部不停的创建go 并调用IO输出hello word。 在主函数的内部通过http.ListenAndServe(“localhost:6060”, nil) 监听6060端口,等待用户查看相关的性能信息。一定要注意包含_ “net/http/pprof”这个包。。 以上代码就实现了一个pprof监控性能的代码,我们只需要在浏览器中执行http://localhost:6060/debug/pprof/就会得到相对应的程序的信息。

    image.png
    由此可见,我们这个程序此时正有六个go协程正在运行。

    1.在cmd中使用web命令
    这里要先安装Graphviz,具体参考Graphviz安装及使用

    C:\Users\lenovo>go tool pprof http://localhost:6060/debug/pprof/profile
    Fetching profile over HTTP from http://localhost:6060/debug/pprof/profile
    Saved profile in C:\Users\lenovo\pprof\pprof.samples.cpu.003.pb.gz
    Type: cpu
    Time: Apr 2, 2019 at 5:19pm (CST)
    Duration: 30s, Total samples = 520ms ( 1.73%)
    Entering interactive mode (type "help" for commands, "o" for options)
    (pprof) web
    

    浏览器会自动打开这个svg文件,也可以手动打开file:///C:/Users/lenovo/AppData/Local/Temp/pprof002.svg

    2.上面使用web生成了svg文件,也可以使用callgrind生成out文件

    (pprof) callgrind
    Generating report in profile001.callgraph.out
    

    这个文件在C:\Users\lenovo里找到了,安装Windows版的qcachegrind,然后使用qcachegrind.exe打开这个out文件。使用qcachegrind可以在各个函数之间自由跳转,查看函数内部的CPU占用情况,相对其他格式要更加灵活方便。

    image.png

    相关文章

      网友评论

          本文标题:Golang 使用pprof分析性能

          本文链接:https://www.haomeiwen.com/subject/utywbqtx.html