一共有三种
如果本身是web 程序, 就是可以在浏览器中直接访问,可以是系统或者http 接口api等
这种本身就可以直接访问的到,所以只需要在main 方法import中添加
_ "net/http/pprof"
在浏览器中使用http://localhost:port/debug/pprof/直接看到当前web服务的状态
如果是一个其他的进程,比如是一个服务的一部分,这个时候可能并没有直接用http 访问的入口
这个时候就可以使用这种方式
import (
_ "net/http/pprof"
"net/http"
"log"
)
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
这个时候并不是web 程序, 所以前面的方式都不行了
需要用到 runtime/pprof
包
import (
"runtime/pprof"
"flag"
"os"
"log"
)
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file")
func main() {
flag.Parse()
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
log.Fatal(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
//... 其他
}
运行程序,生成profile文件
这里详细解释一下top命令的输出格式,例如:
14 2.1% 17.2% 58 8.7% std::_Rb_tree::find
各字段的含义依次是: