使用火焰图分析golang程序
  jE8iBWyhLcsg 2023年11月02日 120 0

golang内置了pprof功能,非常方便和强大,分别有“runtime/pporf”和“net/http/pprof”包来支持。我们这里用http-server来演示。

第一步:引入net/http/pprof包

package main

import (
	"fmt"
	"log"
	"net/http"
	_ "net/http/pprof"
)

func main() {
	http.HandleFunc("/", handler)
	log.Fatal(http.ListenAndServe("localhost:8000", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "URL.Path=%q\n", r.URL.Path)
}

第二步:执行采样

  1. 采样CPU:go tool pprof http://localhost:8000/debug/pprof/profile?seconds=100
  2. 采样堆内存:go tool pprof http://localhost:8000/debug/pprof/heap
  3. 采样阻塞:go tool pprof http://localhost:8000/debug/pprof/block
  4. 采样Mutex:go tool pprof http://localhost:8000/debug/pprof/mutex
  5. 采样Trace:curl -o trace.out http://localhost:8000/debug/pprof/trace?seconds=5 go tool trace trace.out

采样结束后,会生成文件,如CPU采样生成:pprof.samples.cpu.001.pb.gz文件。可以通过命令行分析,也可以通过graphviz进行分析。

第三步:下载graphviz进行分析

mac电脑下载:brew install graphviz 然后执行命令:go tool pprof -http=:8081 pprof.samples.cpu.001.pb.gz 然后通过http://localhost:8081/ui/进行分析。 image.png

参考

https://blog.csdn.net/raoxiaoya/article/details/118493465

https://pkg.go.dev/net/http/pprof@go1.20.5

https://pkg.go.dev/runtime/pprof@go1.20.5

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jE8iBWyhLcsg   2023年11月02日   46   0   0 javasubstringgolang
  Adknp2DJyaqB   2023年11月02日   56   0   0 unsafegolang
  Adknp2DJyaqB   2023年11月02日   36   0   0 unicodegolang
  Ohl6n170bzPf   2023年11月02日   26   0   0 golang
  Adknp2DJyaqB   2023年11月13日   20   0   0 restfulgrpcgolang
  Adknp2DJyaqB   2023年11月13日   30   0   0 发布订阅grpcgolang
  Adknp2DJyaqB   2023年11月02日   32   0   0 golang
  Adknp2DJyaqB   2023年11月02日   35   0   0 golangmilvus
  Adknp2DJyaqB   2023年11月13日   23   0   0 grpcgolang
jE8iBWyhLcsg