Golang线上内存爆掉问题排查(pprof)
package main
import (
"net/http"
"runtime/pprof"
"log"
"os"
)
// 启动性能分析
func StartProfiling(cpuProfile, memProfile string) {
if cpuProfile != "" {
f, err := os.Create(cpuProfile)
if err != nil {
log.Fatal(err)
}
pprof.StartCPUProfile(f)
}
if memProfile != "" {
f, err := os.Create(memProfile)
if err != nil {
log.Fatal(err)
}
pprof.WriteHeapProfile(f)
f.Close()
}
}
// 停止性能分析
func StopProfiling() {
pprof.StopCPUProfile()
}
func main() {
// 启动性能分析,输出到指定文件
StartProfiling("cpu.prof", "mem.prof")
defer StopProfiling()
// 你的业务代码
http.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index))
http.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline))
http.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile))
http.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol))
log.Fatal(http.ListenAndServe(":6060", nil))
}
这段代码展示了如何在Go程序中启动和停止CPU和内存性能分析,并通过HTTP服务提供pprof索引。在实际应用中,可以通过访问特定的URL(如 http://localhost:6060/debug/pprof/ )来获取性能分析报告,并使用相关工具(如go tool pprof
)对报告进行分析。
评论已关闭