GoLang pprof使用(一)

来源:互联网 发布:notepad java 关键字 编辑:程序博客网 时间:2024/05/17 01:19

非web程序查看程序实时运行信息的方式,使用pprof包
启用一个监听端口 11181,可以通过网页(http://127.0.0.1:11181/)实时查看程序的运行状况 。

协程相关信息,协程开启的数量,以及协程的运行堆栈信息。
p := pprof.Lookup(“goroutine”)

Debug.go

package mainimport (    "net/http"    "runtime/pprof")func goppf() {    http.HandleFunc("/", handler)    http.ListenAndServe(":11181", nil)}func handler(w http.ResponseWriter, r *http.Request) {    w.Header().Set("Content-Type", "text/plain")    p := pprof.Lookup("goroutine")    p.WriteTo(w, 1)}

main.go

package mainimport (    "time")var quit chan struct{} = make(chan struct{})func f() {    <-quit}func main() {    for i := 0; i < 10000; i++ {        go f()    }    go goppf() //启用跟踪查看    for {        time.Sleep(1 * time.Second)    }}

网址 http://127.0.0.1:11181/ 访问结果,可查看的详细

goroutine profile: total 100101 @ 0x474c5d 0x4749f4 0x470a7c 0x40115f 0x452f48 0x4546e4 0x455071 0x452a7e 0x43fde1#   0x474c5d    runtime/pprof.writeRuntimeProfile+0xdd  D:/APPInstall/Go/src/runtime/pprof/pprof.go:540#   0x4749f4    runtime/pprof.writeGoroutine+0xa4   D:/APPInstall/Go/src/runtime/pprof/pprof.go:502#   0x470a7c    runtime/pprof.(*Profile).WriteTo+0xdc   D:/APPInstall/Go/src/runtime/pprof/pprof.go:229#   0x40115f    main.handler+0xdf           D:/YSHWork/GoWorkSpace/src/GoPProf/Debug.go:17#   0x452f48    net/http.HandlerFunc.ServeHTTP+0x48 D:/APPInstall/Go/src/net/http/server.go:1265#   0x4546e4    net/http.(*ServeMux).ServeHTTP+0x184    D:/APPInstall/Go/src/net/http/server.go:1541#   0x455071    net/http.serverHandler.ServeHTTP+0x1a1  D:/APPInstall/Go/src/net/http/server.go:1703#   0x452a7e    net/http.(*conn).serve+0xb5e        D:/APPInstall/Go/src/net/http/server.go:12041 @ 0x41528c 0x4152ff 0x41c0ac 0x401234 0x414fba 0x43fde1#   0x401234    main.main+0x74      D:/YSHWork/GoWorkSpace/src/GoPProf/main.go:20#   0x414fba    runtime.main+0xfa   D:/APPInstall/Go/src/runtime/proc.go:631 @ 0x41528c 0x4152ff 0x415125 0x43fde1#   0x41528c    runtime.gopark+0x10c        D:/APPInstall/Go/src/runtime/proc.go:131#   0x4152ff    runtime.goparkunlock+0x4f   D:/APPInstall/Go/src/runtime/proc.go:136#   0x415125    runtime.forcegchelper+0xd5  D:/APPInstall/Go/src/runtime/proc.go:991 @ 0x41528c 0x4152ff 0x40e9b3 0x43fde1#   0x41528c    runtime.gopark+0x10c        D:/APPInstall/Go/src/runtime/proc.go:131#   0x4152ff    runtime.goparkunlock+0x4f   D:/APPInstall/Go/src/runtime/proc.go:136#   0x40e9b3    runtime.bgsweep+0xc3        D:/APPInstall/Go/src/runtime/mgc0.go:981 @ 0x41528c 0x4152ff 0x40dfa1 0x43fde1#   0x41528c    runtime.gopark+0x10c        D:/APPInstall/Go/src/runtime/proc.go:131#   0x4152ff    runtime.goparkunlock+0x4f   D:/APPInstall/Go/src/runtime/proc.go:136#   0x40dfa1    runtime.runfinq+0xc1        D:/APPInstall/Go/src/runtime/malloc.go:72710000 @ 0x41528c 0x4152ff 0x403989 0x4034eb 0x4011b6 0x43fde1#   0x4011b6    main.f+0x46 D:/YSHWork/GoWorkSpace/src/GoPProf/main.go:101 @ 0x41528c 0x411c77 0x4110df 0x4c4eae 0x4c6175 0x4c92e7 0x4c970a 0x4de8c5 0x455ee3 0x4552e9 0x45521b 0x455821 0x401075 0x43fde1#   0x4c4eae    net.(*pollDesc).Wait+0x4e           D:/APPInstall/Go/src/net/fd_poll_runtime.go:84#   0x4c6175    net.(*ioSrv).ExecIO+0x305           D:/APPInstall/Go/src/net/fd_windows.go:188#   0x4c92e7    net.(*netFD).acceptOne+0x547            D:/APPInstall/Go/src/net/fd_windows.go:558#   0x4c970a    net.(*netFD).accept+0x17a           D:/APPInstall/Go/src/net/fd_windows.go:585#   0x4de8c5    net.(*TCPListener).AcceptTCP+0x55       D:/APPInstall/Go/src/net/tcpsock_posix.go:234#   0x455ee3    net/http.tcpKeepAliveListener.Accept+0x53   D:/APPInstall/Go/src/net/http/server.go:1976#   0x4552e9    net/http.(*Server).Serve+0x99           D:/APPInstall/Go/src/net/http/server.go:1728#   0x45521b    net/http.(*Server).ListenAndServe+0x15b     D:/APPInstall/Go/src/net/http/server.go:1718#   0x455821    net/http.ListenAndServe+0xc1            D:/APPInstall/Go/src/net/http/server.go:1808#   0x401075    main.goppf+0x75                 D:/YSHWork/GoWorkSpace/src/GoPProf/Debug.go:101 @ 0x40c4e3 0x41c711 0x43fde1#   0x40c4e3    runtime.notetsleepg+0x93    D:/APPInstall/Go/src/runtime/lock_sema.go:267#   0x41c711    runtime.timerproc+0x101     D:/APPInstall/Go/src/runtime/time.go:2073 @ 0x41528c 0x411c77 0x4110df 0x4c4eae 0x4c6175 0x4c85a0 0x4d84c3 0x44c6b2 0x4a70d5 0x515515 0x51631e 0x516399 0x505575 0x5052c6 0x4479a2 0x44ee26 0x4525c5 0x43fde1#   0x4c4eae    net.(*pollDesc).Wait+0x4e           D:/APPInstall/Go/src/net/fd_poll_runtime.go:84#   0x4c6175    net.(*ioSrv).ExecIO+0x305           D:/APPInstall/Go/src/net/fd_windows.go:188#   0x4c85a0    net.(*netFD).Read+0x180             D:/APPInstall/Go/src/net/fd_windows.go:470#   0x4d84c3    net.(*conn).Read+0xe3               D:/APPInstall/Go/src/net/net.go:121#   0x44c6b2    net/http.(*liveSwitchReader).Read+0xb2      D:/APPInstall/Go/src/net/http/server.go:214#   0x4a70d5    io.(*LimitedReader).Read+0xd5           D:/APPInstall/Go/src/io/io.go:408#   0x515515    bufio.(*Reader).fill+0x1d5          D:/APPInstall/Go/src/bufio/bufio.go:97#   0x51631e    bufio.(*Reader).ReadSlice+0x25e         D:/APPInstall/Go/src/bufio/bufio.go:295#   0x516399    bufio.(*Reader).ReadLine+0x69           D:/APPInstall/Go/src/bufio/bufio.go:324#   0x505575    net/textproto.(*Reader).readLineSlice+0xa5  D:/APPInstall/Go/src/net/textproto/reader.go:55#   0x5052c6    net/textproto.(*Reader).ReadLine+0x56       D:/APPInstall/Go/src/net/textproto/reader.go:36#   0x4479a2    net/http.ReadRequest+0xd2           D:/APPInstall/Go/src/net/http/request.go:598#   0x44ee26    net/http.(*conn).readRequest+0x276      D:/APPInstall/Go/src/net/http/server.go:586#   0x4525c5    net/http.(*conn).serve+0x6a5            D:/APPInstall/Go/src/net/http/server.go:1162

例如

10010 个协程正在运行goroutine profile: total 10010根据提示的详细的文件行信息查找最后的执行操作<-quit 操作 一下表示10000个协程正在执行此操作信息10000 @ 0x41528c 0x4152ff 0x403989 0x4034eb 0x4011b6 0x43fde1#   0x4011b6    main.f+0x46 D:/YSHWork/GoWorkSpace/src/GoPProf/main.go:10
0 0