发布时间:2024-11-05 16:35:13
import _ "net/http/pprof"
这里我们使用了空白标识符_,因为只是为了引入pprof包,不需要使用其中的具体函数。go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()
1. goroutine
点击"goroutine"链接,可以查看当前运行的所有goroutine的信息。可以通过点击"full goroutine stack dump"获取每个goroutine的堆栈信息。2. heap
点击"heap"链接,可以查看堆内存分配的情况。通过获取堆内存分配火焰图,我们可以分析出哪些函数占用了较多的内存,并进行针对性的优化。3. mutex
点击"mutex"链接,可以查看互斥锁的锁定和解锁情况。这对于发现锁竞争问题非常有用。1. 查看当前goroutine的数量:
go tool pprof http://localhost:6060/debug/pprof/goroutine
2. 查看CPU的使用情况:
go tool pprof http://localhost:6060/debug/pprof/profile
3. 查看内存分配情况:
go tool pprof http://localhost:6060/debug/pprof/heap
通过这些命令,我们可以快速获取性能数据,并进行分析。package main
import ( "log" "math/rand" "net/http" _ "net/http/pprof" "time" )
func workload() { for { rand.Intn(100) time.Sleep(time.Millisecond * 50) } }
func main() { go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()
workload() }
在上述代码中,workload函数模拟了一段消耗CPU的任务,每个任务延迟50毫秒。通过启动应用后,访问"http://localhost:6060/debug/pprof/",可以监控到goroutine的数量、堆内存分配情况等数据。