pprof应用
最后更新于:2022-04-02 04:56:33
~~~
package main
import (
"fmt"
"net/http"
"net/http/pprof"
)
func main() {
Init([]string{"localhost: 1234"}) // http访问 ip+端口
ch := make(chan int, 10)
<-ch
}
// StartPprof start http pprof.
func Init(pprofBind []string) {
pprofServeMux := http.NewServeMux()
/*
func Index(w http.ResponseWriter, r *http.Request)
Index回复请求要求的pprof格式的剖面。例如,"/debug/pprof/heap"会回复"heap"剖面。Index会回复"/debug/pprof/" 请求一个列出所有可用的剖面的HTML页面。
*/
pprofServeMux.HandleFunc("/debug/pprof/", pprof.Index)
/*
func Cmdline(w http.ResponseWriter, r *http.Request)
Cmdline回应执行中程序的命令行,采用NUL字节分隔的参数。本包将它注册在/debug/pprof/cmdline。
*/
pprofServeMux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
/*
func Profile(w http.ResponseWriter, r *http.Request)
Profile回复pprof格式的CPU剖面。本包将它注册在/debug/pprof/profile。
*/
pprofServeMux.HandleFunc("/debug/pprof/profile", pprof.Profile)
/*
func Symbol(w http.ResponseWriter, r *http.Request)
Symbol查看请求中列出的程序计数器,回复一个映射程序计数器到函数名的表格。本包将它注册在/debug/pprof/symbol。
*/
pprofServeMux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
for _, addr := range pprofBind {
go func() {
if err := http.ListenAndServe(addr, pprofServeMux); err != nil {
fmt.Printf("http.ListenAndServe(\"%s\", pprofServeMux) error(%v)", addr, err)
panic(err)
}
}()
}
}
~~~
';