From 6fde1a9f35272fd8969564890ae010bd4468ae1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Geisend=C3=B6rfer?= Date: Sun, 17 Jan 2021 19:21:02 +0100 Subject: [PATCH] Note about goroutines --- .../1.net.http.pprof.goroutine.debug0.pb.gz | Bin 0 -> 2082 bytes .../1.net.http.pprof.goroutine.debug1.txt | 77 +++++ .../1.net.http.pprof.goroutine.debug2.txt | 153 ++++++++ .../1.pprof.lookup.goroutine.debug0.pb.gz | Bin 0 -> 1229 bytes .../1.pprof.lookup.goroutine.debug1.txt | 39 +++ .../1.pprof.lookup.goroutine.debug2.txt | 69 ++++ .../goroutine/1.runtime.goroutineprofile.json | 218 ++++++++++++ examples/goroutine/1.runtime.stack.txt | 63 ++++ .../2.net.http.pprof.goroutine.debug0.pb.gz | Bin 0 -> 2072 bytes .../2.net.http.pprof.goroutine.debug1.txt | 77 +++++ .../2.net.http.pprof.goroutine.debug2.txt | 153 ++++++++ .../2.pprof.lookup.goroutine.debug0.pb.gz | Bin 0 -> 1817 bytes .../2.pprof.lookup.goroutine.debug1.txt | 73 ++++ .../2.pprof.lookup.goroutine.debug2.txt | 133 +++++++ .../goroutine/2.runtime.goroutineprofile.json | 326 ++++++++++++++++++ examples/goroutine/2.runtime.stack.txt | 127 +++++++ examples/goroutine/main.go | 186 ++++++++++ goroutine-matrix.png | Bin 0 -> 201665 bytes goroutine.md | 218 ++++++++++++ 19 files changed, 1912 insertions(+) create mode 100644 examples/goroutine/1.net.http.pprof.goroutine.debug0.pb.gz create mode 100644 examples/goroutine/1.net.http.pprof.goroutine.debug1.txt create mode 100644 examples/goroutine/1.net.http.pprof.goroutine.debug2.txt create mode 100644 examples/goroutine/1.pprof.lookup.goroutine.debug0.pb.gz create mode 100644 examples/goroutine/1.pprof.lookup.goroutine.debug1.txt create mode 100644 examples/goroutine/1.pprof.lookup.goroutine.debug2.txt create mode 100644 examples/goroutine/1.runtime.goroutineprofile.json create mode 100644 examples/goroutine/1.runtime.stack.txt create mode 100644 examples/goroutine/2.net.http.pprof.goroutine.debug0.pb.gz create mode 100644 examples/goroutine/2.net.http.pprof.goroutine.debug1.txt create mode 100644 examples/goroutine/2.net.http.pprof.goroutine.debug2.txt create mode 100644 examples/goroutine/2.pprof.lookup.goroutine.debug0.pb.gz create mode 100644 examples/goroutine/2.pprof.lookup.goroutine.debug1.txt create mode 100644 examples/goroutine/2.pprof.lookup.goroutine.debug2.txt create mode 100644 examples/goroutine/2.runtime.goroutineprofile.json create mode 100644 examples/goroutine/2.runtime.stack.txt create mode 100644 examples/goroutine/main.go create mode 100644 goroutine-matrix.png create mode 100644 goroutine.md diff --git a/examples/goroutine/1.net.http.pprof.goroutine.debug0.pb.gz b/examples/goroutine/1.net.http.pprof.goroutine.debug0.pb.gz new file mode 100644 index 0000000000000000000000000000000000000000..ed6471a72d4c5482861e021bd00c90bd93124a8a GIT binary patch literal 2082 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 literal 0 HcmV?d00001 diff --git a/examples/goroutine/1.pprof.lookup.goroutine.debug1.txt b/examples/goroutine/1.pprof.lookup.goroutine.debug1.txt new file mode 100644 index 0000000..10873b5 --- /dev/null +++ b/examples/goroutine/1.pprof.lookup.goroutine.debug1.txt @@ -0,0 +1,39 @@ +goroutine profile: total 6 +2 @ 0x103b125 0x106cd1f 0x13ac44a 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac449 main.shortSleepLoop+0x29 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 + +1 @ 0x103b125 0x10083ef 0x100802b 0x13ac4ed 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x13ac4ec main.chanReceiveForever+0x4c /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10dad7c 0x10dad5e 0x11ba005 0x11d4052 0x11d2ee5 0x12e9de6 0x12e9b17 0x13acce6 0x13acc90 0x106fd81 +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10dad7b internal/poll.(*pollDesc).waitRead+0x1fb /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10dad5d internal/poll.(*FD).Accept+0x1dd /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +# 0x11ba004 net.(*netFD).accept+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +# 0x11d4051 net.(*TCPListener).accept+0x31 /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +# 0x11d2ee4 net.(*TCPListener).Accept+0x64 /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +# 0x12e9de5 net/http.(*Server).Serve+0x265 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +# 0x12e9b16 net/http.(*Server).ListenAndServe+0xb6 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +# 0x13acce5 net/http.ListenAndServe+0x125 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +# 0x13acc8f main.main.func1+0xcf /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 + +1 @ 0x103b125 0x106cd1f 0x13ac48b 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac48a main.sleepLoop+0x2a /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 + +1 @ 0x1069e1d 0x139efc2 0x139ed85 0x139b952 0x13ac965 0x13abe67 0x13ac247 0x103ad29 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x1069e1c runtime/pprof.runtime_goroutineProfileWithLabels+0x5c /usr/local/Cellar/go/1.15.6/libexec/src/runtime/mprof.go:716 +# 0x139efc1 runtime/pprof.writeRuntimeProfile+0xe1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:724 +# 0x139ed84 runtime/pprof.writeGoroutine+0xa4 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:684 +# 0x139b951 runtime/pprof.(*Profile).WriteTo+0x3f1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:331 +# 0x13ac964 main.glob..func4+0x64 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:60 +# 0x13abe66 main.writeProfiles+0x186 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +# 0x13ac246 main.main+0x2c6 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:142 +# 0x103ad28 runtime.main+0x208 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/proc.go:204 + diff --git a/examples/goroutine/1.pprof.lookup.goroutine.debug2.txt b/examples/goroutine/1.pprof.lookup.goroutine.debug2.txt new file mode 100644 index 0000000..a6e03e0 --- /dev/null +++ b/examples/goroutine/1.pprof.lookup.goroutine.debug2.txt @@ -0,0 +1,69 @@ +goroutine 1 [running]: +runtime/pprof.writeGoroutineStacks(0x14e5940, 0xc0000abb00, 0x101b8a5, 0xc000213d20) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:693 +0x9f +runtime/pprof.writeGoroutine(0x14e5940, 0xc0000abb00, 0x2, 0xc000213dc0, 0x10ee5c8) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:682 +0x45 +runtime/pprof.(*Profile).WriteTo(0x17179e0, 0x14e5940, 0xc0000abb00, 0x2, 0xc00002c210, 0xc0002041a0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:331 +0x3f2 +main.glob..func5(0x14e5940, 0xc0000abb00, 0xc000213eb0, 0x2) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:67 +0x65 +main.writeProfiles(0x1, 0xc0000c4008, 0x146641d) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +0x187 +main.main() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:142 +0x2c7 + +goroutine 22 [sleep]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.indirectShortSleepLoop2 + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:185 +0x35 + +goroutine 3 [IO wait]: +internal/poll.runtime_pollWait(0x1e91e88, 0x72, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e018, 0x72, 0x0, 0x0, 0x1465786) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Accept(0xc00019e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +0x1fc +net.(*netFD).accept(0xc00019e000, 0xc0001822d0, 0x1010038, 0xc000088000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +0x45 +net.(*TCPListener).accept(0xc000188060, 0xc000196da8, 0x1010038, 0x30) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +0x32 +net.(*TCPListener).Accept(0xc000188060, 0x1436c40, 0xc0001822d0, 0x13f4620, 0x1714f50) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +0x65 +net/http.(*Server).Serve(0xc00019c000, 0x14ec6e0, 0xc000188060, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +0x266 +net/http.(*Server).ListenAndServe(0xc00019c000, 0xc00019c000, 0x1475536) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +0xb7 +net/http.ListenAndServe(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +main.main.func1(0xc000032120) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 +0x126 +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:121 +0xc5 + +goroutine 4 [sleep]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:130 +0x195 + +goroutine 5 [sleep]: +time.Sleep(0x34630b8a000) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.sleepLoop(0x34630b8a000) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 +0x2b +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:131 +0x1bc + +goroutine 6 [chan receive]: +main.chanReceiveForever() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 +0x4d +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:132 +0x1d4 diff --git a/examples/goroutine/1.runtime.goroutineprofile.json b/examples/goroutine/1.runtime.goroutineprofile.json new file mode 100644 index 0000000..3161341 --- /dev/null +++ b/examples/goroutine/1.runtime.goroutineprofile.json @@ -0,0 +1,218 @@ +[ + { + "Stack0": [ + 20629256, + 20629212, + 20627047, + 20628039, + 17018153, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628554, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 16990811, + 17211861, + 17662341, + 17673596, + 17673566, + 18587653, + 18694226, + 18689765, + 19832294, + 19831575, + 20630758, + 20630672, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628554, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628619, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 16810991, + 16810027, + 20628717, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +] diff --git a/examples/goroutine/1.runtime.stack.txt b/examples/goroutine/1.runtime.stack.txt new file mode 100644 index 0000000..e84af8c --- /dev/null +++ b/examples/goroutine/1.runtime.stack.txt @@ -0,0 +1,63 @@ +goroutine 1 [running]: +main.glob..func1(0x14e5940, 0xc0000aa7b0, 0xc000064eb0, 0x2) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:29 +0x6f +main.writeProfiles(0x1, 0xc0000c4008, 0x146641d) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +0x187 +main.main() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:142 +0x2c7 + +goroutine 22 [sleep]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.indirectShortSleepLoop2 + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:185 +0x35 + +goroutine 3 [IO wait]: +internal/poll.runtime_pollWait(0x1e91e88, 0x72, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e018, 0x72, 0x0, 0x0, 0x1465786) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Accept(0xc00019e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +0x1fc +net.(*netFD).accept(0xc00019e000, 0xc0001822d0, 0x1010038, 0xc000088000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +0x45 +net.(*TCPListener).accept(0xc000188060, 0xc000196da8, 0x1010038, 0x30) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +0x32 +net.(*TCPListener).Accept(0xc000188060, 0x1436c40, 0xc0001822d0, 0x13f4620, 0x1714f50) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +0x65 +net/http.(*Server).Serve(0xc00019c000, 0x14ec6e0, 0xc000188060, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +0x266 +net/http.(*Server).ListenAndServe(0xc00019c000, 0xc00019c000, 0x1475536) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +0xb7 +net/http.ListenAndServe(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +main.main.func1(0xc000032120) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 +0x126 +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:121 +0xc5 + +goroutine 4 [sleep]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:130 +0x195 + +goroutine 5 [sleep]: +time.Sleep(0x34630b8a000) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.sleepLoop(0x34630b8a000) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 +0x2b +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:131 +0x1bc + +goroutine 6 [chan receive]: +main.chanReceiveForever() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 +0x4d +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:132 +0x1d4 diff --git a/examples/goroutine/2.net.http.pprof.goroutine.debug0.pb.gz b/examples/goroutine/2.net.http.pprof.goroutine.debug0.pb.gz new file mode 100644 index 0000000000000000000000000000000000000000..79da14a34e20847feef643d4119c28a855f53a55 GIT binary patch literal 2072 zcmV+z2hqz=D-<_W^0qz+yPfxzk@icz|T0SV)8AO0Z5q9hDIQdk)3v7VAt z6V%1Sp}KHqgv21ufJE@tSHDbHltkc_2nd=8G++a5WI&?$lamsQ!lkg3k3thRNo)=N zW0U`MMug(aJz;(q# zpc$Jfuq27$sjpllOoVzw%EusuDcZu)B#xJ#lu#TVU{TTlKTytbXvJ3Ak|U%6+OUnL zS&}s1W8bNiduT5MlEkMUe^XEbJgO)G`mj%8fbT#0vY>2+kCM`_ z87NZPooa(nydhLiV)2H?rbH4dwM&y`{MWTbiKgI@uyjm8Klal!1Cqj1FW(Y^EpT25 zwg5v$*D@e2c=hBz1lC#&rWFQofDSSst@zGce-~IAoUW6cZ7_sGbR7fIhVMTAix`WN zG<=+vSQ;{zp;-nbjo-c~v37V?VeOE^9L=&cX~%cJE2jeC0|Nyn^P^VZRvIf1o71yj}sOpo$y+nbnAps9Hklq(t*!kmX+&*vnh#nfsQ)u zPBlR&9u8qgrD8xj@sHP~X*Zm1m8RV=hGVpw0qMfCe|}Nq)dRm))7}H)I4*nIjnAFC z6k`$63(eB47YsD$T?|MMzV?S73%5S_M3uM?*5i6Q!GQGQFE2}s!Ucs<*nk@()`!tGvhql5t&z^f0*&Sl^`DvbG7MK#orYl-?xLS% zKr;BsjrT?BBk;PyMqm;r>23xji>Ka@*eIM=*eKkC_ed;@IjBEn~S0_Tzqujp6yTl5;(rR-EhM03M)Od6CA~ zWwN>9kx@+_V?f67PuDLA{RwzR~rPkr>Wn@_*>@xxE0J0m2tDP(-c zh!tJWEeDpvji~9Coxn(VWhb!axmI*bdGDC9Q7`+RZo6jQ)+f1b=RLjX>f_q@gtkGq ztr>oTo4W6rx>t4rYo6;R&o#B8Ys3Rci|%O2b7w7^ zd!vpUa9`&q^7AE|`+BVix|A!rMm*qtaMaGvaJ%yRc-}5^1FF?A=kkun&Eu=DkMI-{ z&396b8|_kF7#!jzw~q5YuE&pa&uFdMIy@-3wmoCJ<}qW7zRK2AyoGwNplcqS*1-P|{`+Jge0TB-ID9euVSC5~3~L?mp9#eXRs;`xGsciQaP zoz*0=^HaxBcEs?wMzg~MEt7M2P$OOOxH>#gDfx;E6qo5bP9;8LrSS{({a*=qJYSGUxO2IN?lMhY3XB#}hFU}NYIDT_3hCKGt-BqHYQLbn0Rj4DNK7-$>^&EpUF*ECq4WB4Gz^9R)3-+gD32!&a-1=w3!*uUq{eiY`Snxr%I7J0eDU+FiIBE0lA2 zr(knWo%5;b>4V0Ol}1=?read72(fi3pzU)C{Dje4-PNX)ys zeBn-4S4)Luk;USvQ!k*jGzM$R8M$A5cxLkEv7+aeox&lWFZ?F}0RR76uNuPL5C8xw CqW?Sq literal 0 HcmV?d00001 diff --git a/examples/goroutine/2.net.http.pprof.goroutine.debug1.txt b/examples/goroutine/2.net.http.pprof.goroutine.debug1.txt new file mode 100644 index 0000000..27d4b98 --- /dev/null +++ b/examples/goroutine/2.net.http.pprof.goroutine.debug1.txt @@ -0,0 +1,77 @@ +goroutine profile: total 10 +2 @ 0x103b125 0x106cd1f 0x13ac44a 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac449 main.shortSleepLoop+0x29 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 + +1 @ 0x103b125 0x10083ef 0x100802b 0x13ac4ed 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x13ac4ec main.chanReceiveForever+0x4c /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10d91c5 0x10d91a3 0x11b8a8f 0x11cb72e 0x12ff937 0x11707c5 0x117092f 0x13005e8 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10d91c4 internal/poll.(*pollDesc).waitRead+0x1a4 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10d91a2 internal/poll.(*FD).Read+0x182 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +# 0x11b8a8e net.(*netFD).Read+0x4e /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +# 0x11cb72d net.(*conn).Read+0x8d /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +# 0x12ff936 net/http.(*persistConn).Read+0x76 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1887 +# 0x11707c4 bufio.(*Reader).fill+0x104 /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +# 0x117092e bufio.(*Reader).Peek+0x4e /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:139 +# 0x13005e7 net/http.(*persistConn).readLoop+0x1a7 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2040 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10dad7c 0x10dad5e 0x11ba005 0x11d4052 0x11d2ee5 0x12e9de6 0x12e9b17 0x13acce6 0x13acc90 0x106fd81 +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10dad7b internal/poll.(*pollDesc).waitRead+0x1fb /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10dad5d internal/poll.(*FD).Accept+0x1dd /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +# 0x11ba004 net.(*netFD).accept+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +# 0x11d4051 net.(*TCPListener).accept+0x31 /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +# 0x11d2ee4 net.(*TCPListener).Accept+0x64 /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +# 0x12e9de5 net/http.(*Server).Serve+0x265 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +# 0x12e9b16 net/http.(*Server).ListenAndServe+0xb6 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +# 0x13acce5 net/http.ListenAndServe+0x125 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +# 0x13acc8f main.main.func1+0xcf /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 + +1 @ 0x103b125 0x104afcf 0x130223c 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x130223b net/http.(*persistConn).writeLoop+0x11b /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2340 + +1 @ 0x103b125 0x104afcf 0x1302f59 0x12f74a5 0x12dd435 0x129e853 0x129e23f 0x12a025f 0x129fbbe 0x129fbce 0x13abba5 0x13abb8a 0x13acafe 0x13abe67 0x13ac352 0x103ad29 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x1302f58 net/http.(*persistConn).roundTrip+0x778 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2565 +# 0x12f74a4 net/http.(*Transport).roundTrip+0xa64 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:582 +# 0x12dd434 net/http.(*Transport).RoundTrip+0x34 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/roundtrip.go:17 +# 0x129e852 net/http.send+0x452 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:252 +# 0x129e23e net/http.(*Client).send+0xfe /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:176 +# 0x12a025e net/http.(*Client).do+0x45e /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:718 +# 0x129fbbd net/http.(*Client).Do+0xbd /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:586 +# 0x129fbcd net/http.(*Client).Get+0xcd /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:475 +# 0x13abba4 net/http.Get+0x104 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:447 +# 0x13abb89 main.writeHttpProfile+0xe9 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:92 +# 0x13acafd main.glob..func7+0x3d /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:79 +# 0x13abe66 main.writeProfiles+0x186 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +# 0x13ac351 main.main+0x3d1 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:152 +# 0x103ad28 runtime.main+0x208 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/proc.go:204 + +1 @ 0x103b125 0x106cd1f 0x13ac48b 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac48a main.sleepLoop+0x2a /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 + +1 @ 0x1069e1d 0x139efc2 0x139ed85 0x139b952 0x13a9865 0x13ab145 0x12e6424 0x12e834d 0x12e9a23 0x12e522d 0x106fd81 +# 0x1069e1c runtime/pprof.runtime_goroutineProfileWithLabels+0x5c /usr/local/Cellar/go/1.15.6/libexec/src/runtime/mprof.go:716 +# 0x139efc1 runtime/pprof.writeRuntimeProfile+0xe1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:724 +# 0x139ed84 runtime/pprof.writeGoroutine+0xa4 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:684 +# 0x139b951 runtime/pprof.(*Profile).WriteTo+0x3f1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:331 +# 0x13a9864 net/http/pprof.handler.ServeHTTP+0x384 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/pprof/pprof.go:256 +# 0x13ab144 net/http/pprof.Index+0x944 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/pprof/pprof.go:367 +# 0x12e6423 net/http.HandlerFunc.ServeHTTP+0x43 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2042 +# 0x12e834c net/http.(*ServeMux).ServeHTTP+0x1ac /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2417 +# 0x12e9a22 net/http.serverHandler.ServeHTTP+0xa2 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2843 +# 0x12e522c net/http.(*conn).serve+0x8ac /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:1925 + +1 @ 0x12def61 0x106fd81 +# 0x12def60 net/http.(*connReader).backgroundRead+0x0 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:689 + diff --git a/examples/goroutine/2.net.http.pprof.goroutine.debug2.txt b/examples/goroutine/2.net.http.pprof.goroutine.debug2.txt new file mode 100644 index 0000000..f4fcd12 --- /dev/null +++ b/examples/goroutine/2.net.http.pprof.goroutine.debug2.txt @@ -0,0 +1,153 @@ +goroutine 41 [running]: +runtime/pprof.writeGoroutineStacks(0x14e5f60, 0xc0002ae000, 0xc0002a20c0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:693 +0x9f +runtime/pprof.writeGoroutine(0x14e5f60, 0xc0002ae000, 0x2, 0x1714f40, 0xc0002a4160) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:682 +0x45 +runtime/pprof.(*Profile).WriteTo(0x17179e0, 0x14e5f60, 0xc0002ae000, 0x2, 0xc0002ae000, 0xc0003379d8) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:331 +0x3f2 +net/http/pprof.handler.ServeHTTP(0xc00029e011, 0x9, 0x14ec9a0, 0xc0002ae000, 0xc0001da100) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/pprof/pprof.go:256 +0x385 +net/http/pprof.Index(0x14ec9a0, 0xc0002ae000, 0xc0001da100) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/pprof/pprof.go:367 +0x945 +net/http.HandlerFunc.ServeHTTP(0x1486d90, 0x14ec9a0, 0xc0002ae000, 0xc0001da100) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2042 +0x44 +net/http.(*ServeMux).ServeHTTP(0x1725ba0, 0x14ec9a0, 0xc0002ae000, 0xc0001da100) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2417 +0x1ad +net/http.serverHandler.ServeHTTP(0xc00019c000, 0x14ec9a0, 0xc0002ae000, 0xc0001da100) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2843 +0xa3 +net/http.(*conn).serve(0xc0000c6320, 0x14ed4a0, 0xc000322000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:1925 +0x8ad +created by net/http.(*Server).Serve + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2969 +0x36c + +goroutine 1 [select]: +net/http.(*persistConn).roundTrip(0xc0000cea20, 0xc000322240, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2565 +0x779 +net/http.(*Transport).roundTrip(0x171d020, 0xc0001da200, 0x30, 0x30, 0x180d7d0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:582 +0xa65 +net/http.(*Transport).RoundTrip(0x171d020, 0xc0001da200, 0x171d020, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/roundtrip.go:17 +0x35 +net/http.send(0xc0001da200, 0x14e5d80, 0x171d020, 0x0, 0x0, 0x0, 0xc000186040, 0x203000, 0x1, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:252 +0x453 +net/http.(*Client).send(0x17259e0, 0xc0001da200, 0x0, 0x0, 0x0, 0xc000186040, 0x0, 0x1, 0xf8) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:176 +0xff +net/http.(*Client).do(0x17259e0, 0xc0001da200, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:718 +0x45f +net/http.(*Client).Do(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:586 +net/http.(*Client).Get(0x17259e0, 0xc0001ce080, 0x33, 0x2, 0x2, 0xc0001ce080) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:475 +0xbe +net/http.Get(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/client.go:447 +main.writeHttpProfile(0x14e5940, 0xc00007c630, 0x2, 0x0, 0x0) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:92 +0x105 +main.glob..func8(0x14e5940, 0xc00007c630, 0xc000333eb0, 0x2) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:85 +0x3e +main.writeProfiles(0x2, 0xc0000c4008, 0x1466424) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +0x187 +main.main() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:152 +0x3d2 + +goroutine 22 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.indirectShortSleepLoop2 + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:185 +0x35 + +goroutine 3 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91e88, 0x72, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e018, 0x72, 0x0, 0x0, 0x1465786) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Accept(0xc00019e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +0x1fc +net.(*netFD).accept(0xc00019e000, 0x7d667d63cbbded3e, 0x1789ccbbded3e, 0x100000001) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +0x45 +net.(*TCPListener).accept(0xc000188060, 0x60006709, 0xc000196da8, 0x109abe6) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +0x32 +net.(*TCPListener).Accept(0xc000188060, 0xc000196df8, 0x18, 0xc000001200, 0x12e9eec) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +0x65 +net/http.(*Server).Serve(0xc00019c000, 0x14ec6e0, 0xc000188060, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +0x266 +net/http.(*Server).ListenAndServe(0xc00019c000, 0xc00019c000, 0x1475536) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +0xb7 +net/http.ListenAndServe(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +main.main.func1(0xc000032120) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 +0x126 +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:121 +0xc5 + +goroutine 4 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:130 +0x195 + +goroutine 5 [sleep, 1 minutes]: +time.Sleep(0x34630b8a000) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.sleepLoop(0x34630b8a000) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 +0x2b +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:131 +0x1bc + +goroutine 6 [chan receive, 1 minutes]: +main.chanReceiveForever() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 +0x4d +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:132 +0x1d4 + +goroutine 24 [select]: +net/http.(*persistConn).writeLoop(0xc0000cea20) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2340 +0x11c +created by net/http.(*Transport).dialConn + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1709 +0xcdc + +goroutine 23 [IO wait]: +internal/poll.runtime_pollWait(0x1e91da0, 0x72, 0x14e6ca0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00010e198, 0x72, 0x14e6c00, 0x16db878, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Read(0xc00010e180, 0xc000256000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +0x1a5 +net.(*netFD).Read(0xc00010e180, 0xc000256000, 0x1000, 0x1000, 0x103b1dc, 0xc000199b58, 0x10680e0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +0x4f +net.(*conn).Read(0xc000010008, 0xc000256000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +0x8e +net/http.(*persistConn).Read(0xc0000cea20, 0xc000256000, 0x1000, 0x1000, 0xc00009e300, 0xc000199c58, 0x10074b5) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1887 +0x77 +bufio.(*Reader).fill(0xc0001801e0) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +0x105 +bufio.(*Reader).Peek(0xc0001801e0, 0x1, 0x0, 0x0, 0x1, 0x0, 0xc00009e240) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:139 +0x4f +net/http.(*persistConn).readLoop(0xc0000cea20) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2040 +0x1a8 +created by net/http.(*Transport).dialConn + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1708 +0xcb7 + +goroutine 54 [IO wait]: +internal/poll.runtime_pollWait(0x1e91cb8, 0x72, 0x14e6ca0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e098, 0x72, 0x14e6c00, 0x16db878, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Read(0xc00019e080, 0xc00007c311, 0x1, 0x1, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +0x1a5 +net.(*netFD).Read(0xc00019e080, 0xc00007c311, 0x1, 0x1, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +0x4f +net.(*conn).Read(0xc000186028, 0xc00007c311, 0x1, 0x1, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +0x8e +net/http.(*connReader).backgroundRead(0xc00007c300) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:690 +0x58 +created by net/http.(*connReader).startBackgroundRead + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:686 +0xd5 diff --git a/examples/goroutine/2.pprof.lookup.goroutine.debug0.pb.gz b/examples/goroutine/2.pprof.lookup.goroutine.debug0.pb.gz new file mode 100644 index 0000000000000000000000000000000000000000..f0add3cece60ffc8a81c0f0da9b2f5c266172a52 GIT binary patch literal 1817 zcmV+!2j=)6iwFP!00004|D0A`Y#dh=W`D*$yS8_a*Y^6@Ufb8#f4iGxr=B$b&0igr zKI9=viXtJTupVEphm2>InOQdyFBP~@T2Vw1sD!ErQ6$tR74*SvNhMkl2~|``fj*$n z5(&{3wI~l!ky?QSy7#WPw&Mqzm+{Vg=X~FH&OP^De=!L$jDIuUypae^Dgg8BW`NzNwh~sN9lvo@MGFTf&NYI;)eU#z`B=F}NOJF;-Gstye zJe`Qe6N5=eVVWZ(>Grq24%~nwzL7*plf(|{V4WPnpywY^n1L@Rl)Qmm)TOXC`scTm zL>vA}OSEBzG7NGVjHQ#Yq|w&WXs4Si-;o;axT<;DF-uv790BO<-(Hp&;9oTlU^jI$ zBN5OXT%XY>FVt}QoRdTH9;2+&;T3c2wimL!F|8i^DX`MmR#2o_YQqNs0K6xWW)eX;fiIe|k}2-S}uiVcp1xu@Rny zZhGO9r&Bx$IXtYO9FEZ#<2(;Jdh_b4gnDqA8_!?1QqA6D32)(rO(^n;y$7>nIkjH77W`$f2#?skXJEYPbon4tMcISF} zIYJ+;-uX?68_r!X{KglYg0o+Bq zSSi_i2i+Z-GUC{;|Y~Gh`VVw%X5SQT6z68a07<$iWVHgJ+y~a zIKm*^c;sIaE3BC*ph+gXha(Kp-{1XMV#D}oTyYNL49zf$BNXVpYrjr$14i)EyuwCs zFYQ&`8m1qvDr^*A(%2~8OZTz@&%+44_aim^41Y;H31j#*mCbM;?PG;9z!>hQ{S0#1 zwSsA2aHudWCuEfVaO)}H25|giT%~b5KnK`Cj=<>Jb=A3Xd@iT3aXdtaSSiLlEaZ)t2do}yDMnag1;4SalJa%#F*(iK1W%J2Sr<=syoyP6+NLhNA7`ka-j`GMbv z98Xw=?Kiy0$^;EBa+XA;=GUviMeBgs2m{mg?W$|e3fHX$X3aNeDl_{k`%TxG6PJW- zhJkGcI?t>JzFn#LR$8%~bA_l|J0?-NHQ(x4sybdJT=auTF`f4Px>Ys55Q-o)7li9v zs?>xN3UA&Q!GZ{+w=l5HniDNH<|?+oq@!xWtoeKDfxqCmBG}{kkqAw3sk&5mMQFB~ zU@AFfUWCyFw>l?WE3JMnSKWrNFwj+2?8T}V2zzUI9?t$3-hh*H=xNLnmu#c2_xajL2pvtx0BK%yB_-X z#S8Vdy|@)|vw$6WZ4%4%CF#A{wsUG%l`875HMRw!>pAJo>yZ9d$R;4GPJQ)QXn6L_ zXO~PUTwzBw-#WD2PBhO|Q)f!g>z!>_>W2d-5^Ak8N;{M{wR*p2jioLx%+}q|x+Tx( zYxKMmEuNM)WN01SslO$~T=T85jatgoS$!EbWvpX6C0DlfQ%V%JkobJ--yXIREtZ?I zrOJ8Ppoe@5ReNf#KUYx;wAae1FUo5(IR00960noBST Hy$%2Xdun=M literal 0 HcmV?d00001 diff --git a/examples/goroutine/2.pprof.lookup.goroutine.debug1.txt b/examples/goroutine/2.pprof.lookup.goroutine.debug1.txt new file mode 100644 index 0000000..2168c93 --- /dev/null +++ b/examples/goroutine/2.pprof.lookup.goroutine.debug1.txt @@ -0,0 +1,73 @@ +goroutine profile: total 9 +2 @ 0x103b125 0x106cd1f 0x13ac44a 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac449 main.shortSleepLoop+0x29 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 + +1 @ 0x103b125 0x10083ef 0x100802b 0x13ac4ed 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x13ac4ec main.chanReceiveForever+0x4c /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10d91c5 0x10d91a3 0x11b8a8f 0x11cb72e 0x12df52d 0x11707c5 0x117151d 0x1171754 0x1263c2c 0x12d96ca 0x12d96f9 0x12e09ba 0x12e5085 0x106fd81 +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10d91c4 internal/poll.(*pollDesc).waitRead+0x1a4 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10d91a2 internal/poll.(*FD).Read+0x182 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +# 0x11b8a8e net.(*netFD).Read+0x4e /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +# 0x11cb72d net.(*conn).Read+0x8d /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +# 0x12df52c net/http.(*connReader).Read+0x1ac /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:798 +# 0x11707c4 bufio.(*Reader).fill+0x104 /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +# 0x117151c bufio.(*Reader).ReadSlice+0x3c /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:360 +# 0x1171753 bufio.(*Reader).ReadLine+0x33 /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:389 +# 0x1263c2b net/textproto.(*Reader).readLineSlice+0x6b /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:58 +# 0x12d96c9 net/textproto.(*Reader).ReadLine+0xa9 /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:39 +# 0x12d96f8 net/http.readRequest+0xd8 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/request.go:1012 +# 0x12e09b9 net/http.(*conn).readRequest+0x199 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:984 +# 0x12e5084 net/http.(*conn).serve+0x704 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:1851 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10d91c5 0x10d91a3 0x11b8a8f 0x11cb72e 0x12ff937 0x11707c5 0x117092f 0x13005e8 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10d91c4 internal/poll.(*pollDesc).waitRead+0x1a4 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10d91a2 internal/poll.(*FD).Read+0x182 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +# 0x11b8a8e net.(*netFD).Read+0x4e /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +# 0x11cb72d net.(*conn).Read+0x8d /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +# 0x12ff936 net/http.(*persistConn).Read+0x76 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1887 +# 0x11707c4 bufio.(*Reader).fill+0x104 /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +# 0x117092e bufio.(*Reader).Peek+0x4e /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:139 +# 0x13005e7 net/http.(*persistConn).readLoop+0x1a7 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2040 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10dad7c 0x10dad5e 0x11ba005 0x11d4052 0x11d2ee5 0x12e9de6 0x12e9b17 0x13acce6 0x13acc90 0x106fd81 +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10dad7b internal/poll.(*pollDesc).waitRead+0x1fb /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10dad5d internal/poll.(*FD).Accept+0x1dd /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +# 0x11ba004 net.(*netFD).accept+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +# 0x11d4051 net.(*TCPListener).accept+0x31 /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +# 0x11d2ee4 net.(*TCPListener).Accept+0x64 /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +# 0x12e9de5 net/http.(*Server).Serve+0x265 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +# 0x12e9b16 net/http.(*Server).ListenAndServe+0xb6 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +# 0x13acce5 net/http.ListenAndServe+0x125 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +# 0x13acc8f main.main.func1+0xcf /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 + +1 @ 0x103b125 0x104afcf 0x130223c 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x130223b net/http.(*persistConn).writeLoop+0x11b /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2340 + +1 @ 0x103b125 0x106cd1f 0x13ac48b 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac48a main.sleepLoop+0x2a /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 + +1 @ 0x1069e1d 0x139efc2 0x139ed85 0x139b952 0x13ac965 0x13abe67 0x13ac352 0x103ad29 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x1069e1c runtime/pprof.runtime_goroutineProfileWithLabels+0x5c /usr/local/Cellar/go/1.15.6/libexec/src/runtime/mprof.go:716 +# 0x139efc1 runtime/pprof.writeRuntimeProfile+0xe1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:724 +# 0x139ed84 runtime/pprof.writeGoroutine+0xa4 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:684 +# 0x139b951 runtime/pprof.(*Profile).WriteTo+0x3f1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:331 +# 0x13ac964 main.glob..func4+0x64 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:60 +# 0x13abe66 main.writeProfiles+0x186 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +# 0x13ac351 main.main+0x3d1 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:152 +# 0x103ad28 runtime.main+0x208 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/proc.go:204 + diff --git a/examples/goroutine/2.pprof.lookup.goroutine.debug2.txt b/examples/goroutine/2.pprof.lookup.goroutine.debug2.txt new file mode 100644 index 0000000..bda4fee --- /dev/null +++ b/examples/goroutine/2.pprof.lookup.goroutine.debug2.txt @@ -0,0 +1,133 @@ +goroutine 1 [running]: +runtime/pprof.writeGoroutineStacks(0x14e5940, 0xc0000abc50, 0x101b8a5, 0xc000333d20) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:693 +0x9f +runtime/pprof.writeGoroutine(0x14e5940, 0xc0000abc50, 0x2, 0xc000333dc0, 0x10ee5c8) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:682 +0x45 +runtime/pprof.(*Profile).WriteTo(0x17179e0, 0x14e5940, 0xc0000abc50, 0x2, 0xc00002c210, 0xc0000ac4e0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/pprof/pprof.go:331 +0x3f2 +main.glob..func5(0x14e5940, 0xc0000abc50, 0xc000333eb0, 0x2) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:67 +0x65 +main.writeProfiles(0x2, 0xc0000c4008, 0x1466424) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +0x187 +main.main() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:152 +0x3d2 + +goroutine 22 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.indirectShortSleepLoop2 + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:185 +0x35 + +goroutine 3 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91e88, 0x72, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e018, 0x72, 0x0, 0x0, 0x1465786) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Accept(0xc00019e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +0x1fc +net.(*netFD).accept(0xc00019e000, 0x7d667d63cbbded3e, 0x1789ccbbded3e, 0x100000001) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +0x45 +net.(*TCPListener).accept(0xc000188060, 0x60006709, 0xc000196da8, 0x109abe6) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +0x32 +net.(*TCPListener).Accept(0xc000188060, 0xc000196df8, 0x18, 0xc000001200, 0x12e9eec) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +0x65 +net/http.(*Server).Serve(0xc00019c000, 0x14ec6e0, 0xc000188060, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +0x266 +net/http.(*Server).ListenAndServe(0xc00019c000, 0xc00019c000, 0x1475536) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +0xb7 +net/http.ListenAndServe(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +main.main.func1(0xc000032120) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 +0x126 +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:121 +0xc5 + +goroutine 4 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:130 +0x195 + +goroutine 5 [sleep, 1 minutes]: +time.Sleep(0x34630b8a000) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.sleepLoop(0x34630b8a000) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 +0x2b +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:131 +0x1bc + +goroutine 6 [chan receive, 1 minutes]: +main.chanReceiveForever() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 +0x4d +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:132 +0x1d4 + +goroutine 24 [select, 1 minutes]: +net/http.(*persistConn).writeLoop(0xc0000cea20) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2340 +0x11c +created by net/http.(*Transport).dialConn + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1709 +0xcdc + +goroutine 23 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91da0, 0x72, 0x14e6ca0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00010e198, 0x72, 0x14e6c00, 0x16db878, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Read(0xc00010e180, 0xc000256000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +0x1a5 +net.(*netFD).Read(0xc00010e180, 0xc000256000, 0x1000, 0x1000, 0x103b1dc, 0xc000199b58, 0x10680e0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +0x4f +net.(*conn).Read(0xc000010008, 0xc000256000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +0x8e +net/http.(*persistConn).Read(0xc0000cea20, 0xc000256000, 0x1000, 0x1000, 0xc00009e300, 0xc000199c58, 0x10074b5) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1887 +0x77 +bufio.(*Reader).fill(0xc0001801e0) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +0x105 +bufio.(*Reader).Peek(0xc0001801e0, 0x1, 0x0, 0x0, 0x1, 0x0, 0xc0001d0060) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:139 +0x4f +net/http.(*persistConn).readLoop(0xc0000cea20) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2040 +0x1a8 +created by net/http.(*Transport).dialConn + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1708 +0xcb7 + +goroutine 41 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91cb8, 0x72, 0x14e6ca0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e098, 0x72, 0x14e6c00, 0x16db878, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Read(0xc00019e080, 0xc000326000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +0x1a5 +net.(*netFD).Read(0xc00019e080, 0xc000326000, 0x1000, 0x1000, 0x203000, 0x203000, 0x203000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +0x4f +net.(*conn).Read(0xc000186028, 0xc000326000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +0x8e +net/http.(*connReader).Read(0xc00007c300, 0xc000326000, 0x1000, 0x1000, 0x100000006, 0x10, 0x1819408) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:798 +0x1ad +bufio.(*Reader).fill(0xc000290060) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +0x105 +bufio.(*Reader).ReadSlice(0xc000290060, 0xa, 0x1819408, 0xc000337988, 0x100f6d0, 0xc000110000, 0x100) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:360 +0x3d +bufio.(*Reader).ReadLine(0xc000290060, 0xc000110000, 0x1079694, 0xc0001a4000, 0x0, 0x1010038, 0x30) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:389 +0x34 +net/textproto.(*Reader).readLineSlice(0xc000182300, 0xc000110000, 0x10d7c4d, 0xc00019e080, 0x1068000, 0xc000282900) + /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:58 +0x6c +net/textproto.(*Reader).ReadLine(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:39 +net/http.readRequest(0xc000290060, 0x0, 0xc000110000, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/request.go:1012 +0xaa +net/http.(*conn).readRequest(0xc0000c6320, 0x14ed4a0, 0xc000322000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:984 +0x19a +net/http.(*conn).serve(0xc0000c6320, 0x14ed4a0, 0xc000322000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:1851 +0x705 +created by net/http.(*Server).Serve + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2969 +0x36c diff --git a/examples/goroutine/2.runtime.goroutineprofile.json b/examples/goroutine/2.runtime.goroutineprofile.json new file mode 100644 index 0000000..740b7a7 --- /dev/null +++ b/examples/goroutine/2.runtime.goroutineprofile.json @@ -0,0 +1,326 @@ +[ + { + "Stack0": [ + 20629256, + 20629212, + 20627047, + 20628306, + 17018153, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628554, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 16990811, + 17211861, + 17662341, + 17673596, + 17673566, + 18587653, + 18694226, + 18689765, + 19832294, + 19831575, + 20630758, + 20630672, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628554, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628619, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 16810991, + 16810027, + 20628717, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 17084367, + 19931708, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 16990811, + 17211861, + 17662341, + 17666501, + 17666467, + 18582159, + 18659118, + 19921207, + 18286533, + 18286895, + 19924456, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "Stack0": [ + 17019173, + 16990811, + 17211861, + 17662341, + 17666501, + 17666467, + 18582159, + 18659118, + 19789101, + 18286533, + 18289949, + 18290516, + 19282988, + 19764938, + 19764985, + 19794362, + 19812485, + 17235329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } +] diff --git a/examples/goroutine/2.runtime.stack.txt b/examples/goroutine/2.runtime.stack.txt new file mode 100644 index 0000000..6dfd93c --- /dev/null +++ b/examples/goroutine/2.runtime.stack.txt @@ -0,0 +1,127 @@ +goroutine 1 [running]: +main.glob..func1(0x14e5940, 0xc0000aa7b0, 0xc000064eb0, 0x2) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:29 +0x6f +main.writeProfiles(0x2, 0xc0000c4008, 0x1466424) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +0x187 +main.main() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:152 +0x3d2 + +goroutine 22 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.indirectShortSleepLoop2 + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:185 +0x35 + +goroutine 3 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91e88, 0x72, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e018, 0x72, 0x0, 0x0, 0x1465786) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Accept(0xc00019e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +0x1fc +net.(*netFD).accept(0xc00019e000, 0x7d667d63cbbded3e, 0x1789ccbbded3e, 0x100000001) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_unix.go:172 +0x45 +net.(*TCPListener).accept(0xc000188060, 0x60006709, 0xc000196da8, 0x109abe6) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock_posix.go:139 +0x32 +net.(*TCPListener).Accept(0xc000188060, 0xc000196df8, 0x18, 0xc000001200, 0x12e9eec) + /usr/local/Cellar/go/1.15.6/libexec/src/net/tcpsock.go:261 +0x65 +net/http.(*Server).Serve(0xc00019c000, 0x14ec6e0, 0xc000188060, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2937 +0x266 +net/http.(*Server).ListenAndServe(0xc00019c000, 0xc00019c000, 0x1475536) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2866 +0xb7 +net/http.ListenAndServe(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:3120 +main.main.func1(0xc000032120) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:123 +0x126 +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:121 +0xc5 + +goroutine 4 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:130 +0x195 + +goroutine 5 [sleep, 1 minutes]: +time.Sleep(0x34630b8a000) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.sleepLoop(0x34630b8a000) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:171 +0x2b +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:131 +0x1bc + +goroutine 6 [chan receive, 1 minutes]: +main.chanReceiveForever() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 +0x4d +created by main.main + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:132 +0x1d4 + +goroutine 24 [select, 1 minutes]: +net/http.(*persistConn).writeLoop(0xc0000cea20) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2340 +0x11c +created by net/http.(*Transport).dialConn + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1709 +0xcdc + +goroutine 23 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91da0, 0x72, 0x14e6ca0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00010e198, 0x72, 0x14e6c00, 0x16db878, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Read(0xc00010e180, 0xc000256000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +0x1a5 +net.(*netFD).Read(0xc00010e180, 0xc000256000, 0x1000, 0x1000, 0x103b1dc, 0xc000199b58, 0x10680e0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +0x4f +net.(*conn).Read(0xc000010008, 0xc000256000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +0x8e +net/http.(*persistConn).Read(0xc0000cea20, 0xc000256000, 0x1000, 0x1000, 0xc00009e300, 0xc000199c58, 0x10074b5) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1887 +0x77 +bufio.(*Reader).fill(0xc0001801e0) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +0x105 +bufio.(*Reader).Peek(0xc0001801e0, 0x1, 0x0, 0x0, 0x1, 0x0, 0xc0001d0060) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:139 +0x4f +net/http.(*persistConn).readLoop(0xc0000cea20) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:2040 +0x1a8 +created by net/http.(*Transport).dialConn + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/transport.go:1708 +0xcb7 + +goroutine 41 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91cb8, 0x72, 0x14e6ca0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e098, 0x72, 0x14e6c00, 0x16db878, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Read(0xc00019e080, 0xc000326000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +0x1a5 +net.(*netFD).Read(0xc00019e080, 0xc000326000, 0x1000, 0x1000, 0x203000, 0x203000, 0x203000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +0x4f +net.(*conn).Read(0xc000186028, 0xc000326000, 0x1000, 0x1000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +0x8e +net/http.(*connReader).Read(0xc00007c300, 0xc000326000, 0x1000, 0x1000, 0x100000006, 0x10, 0x1819408) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:798 +0x1ad +bufio.(*Reader).fill(0xc000290060) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +0x105 +bufio.(*Reader).ReadSlice(0xc000290060, 0xa, 0x1819408, 0xc000337988, 0x100f6d0, 0xc000110000, 0x100) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:360 +0x3d +bufio.(*Reader).ReadLine(0xc000290060, 0xc000110000, 0x1079694, 0xc0001a4000, 0x0, 0x1010038, 0x30) + /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:389 +0x34 +net/textproto.(*Reader).readLineSlice(0xc000182300, 0xc000110000, 0x10d7c4d, 0xc00019e080, 0x1068000, 0xc000282900) + /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:58 +0x6c +net/textproto.(*Reader).ReadLine(...) + /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:39 +net/http.readRequest(0xc000290060, 0x0, 0xc000110000, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/request.go:1012 +0xaa +net/http.(*conn).readRequest(0xc0000c6320, 0x14ed4a0, 0xc000322000, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:984 +0x19a +net/http.(*conn).serve(0xc0000c6320, 0x14ed4a0, 0xc000322000) + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:1851 +0x705 +created by net/http.(*Server).Serve + /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:2969 +0x36c diff --git a/examples/goroutine/main.go b/examples/goroutine/main.go new file mode 100644 index 0000000..1011db4 --- /dev/null +++ b/examples/goroutine/main.go @@ -0,0 +1,186 @@ +package main + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "flag" + "fmt" + "io" + "io/ioutil" + "net/http" + _ "net/http/pprof" + "runtime" + "runtime/pprof" + "time" +) + +type Profile struct { + Name string + WriteTo func(w io.Writer) error +} + +var profiles = []Profile{ + { + Name: "runtime.stack.txt", + WriteTo: func(w io.Writer) error { + buf := make([]byte, 1024*1024) + n := runtime.Stack(buf, true) + buf = buf[:n] + _, err := w.Write(buf) + return err + }, + }, + { + Name: "runtime.goroutineprofile.json", + WriteTo: func(w io.Writer) error { + p := make([]runtime.StackRecord, 1000) + n, ok := runtime.GoroutineProfile(p) + if !ok { + return errors.New("runtime.GoroutineProfile: not ok") + } + p = p[0:n] + e := json.NewEncoder(w) + e.SetIndent("", " ") + return e.Encode(p) + }, + }, + { + Name: "pprof.lookup.goroutine.debug0.pb.gz", + WriteTo: func(w io.Writer) error { + profile := pprof.Lookup("goroutine") + return profile.WriteTo(w, 0) + }, + }, + { + Name: "pprof.lookup.goroutine.debug1.txt", + WriteTo: func(w io.Writer) error { + profile := pprof.Lookup("goroutine") + return profile.WriteTo(w, 1) + }, + }, + { + Name: "pprof.lookup.goroutine.debug2.txt", + WriteTo: func(w io.Writer) error { + profile := pprof.Lookup("goroutine") + return profile.WriteTo(w, 2) + }, + }, + { + Name: "net.http.pprof.goroutine.debug0.pb.gz", + WriteTo: func(w io.Writer) error { + return writeHttpProfile(w, 0) + }, + }, + { + Name: "net.http.pprof.goroutine.debug1.txt", + WriteTo: func(w io.Writer) error { + return writeHttpProfile(w, 1) + }, + }, + { + Name: "net.http.pprof.goroutine.debug2.txt", + WriteTo: func(w io.Writer) error { + return writeHttpProfile(w, 2) + }, + }, +} + +func writeHttpProfile(w io.Writer, debug int) error { + url := fmt.Sprintf("http://%s/debug/pprof/goroutine?debug=%d", listenAddr, debug) + res, err := http.Get(url) + if err != nil { + return err + } + defer res.Body.Close() + + _, err = io.Copy(w, res.Body) + return err +} + +func writeProfiles(n int) error { + for _, profile := range profiles { + buf := &bytes.Buffer{} + filename := fmt.Sprintf("%d.%s", n, profile.Name) + if err := profile.WriteTo(buf); err != nil { + return err + } else if err := ioutil.WriteFile(filename, buf.Bytes(), 0666); err != nil { + return err + } + } + return nil +} + +var listenAddr = "127.0.0.1:8080" + +func main() { + flag.Parse() + + errCh := make(chan error, 1) + go func() { + fmt.Printf("Listening for pprof requests on %s\n", listenAddr) + errCh <- http.ListenAndServe(listenAddr, nil) + }() + + labels := pprof.Labels("test_label", "test_value") + ctx := pprof.WithLabels(context.Background(), labels) + pprof.SetGoroutineLabels(ctx) + + go shortSleepLoop() + go sleepLoop(time.Hour) + go chanReceiveForever() + go indirectShortSleepLoop() + + sleep := time.Second + fmt.Printf("Sleeping for %s followed by gc\n", sleep) + + time.Sleep(time.Second) + runtime.GC() + + fmt.Printf("Dump 1\n") + if err := writeProfiles(1); err != nil { + panic(err) + } + + sleep = 1*time.Minute + 10*time.Second + fmt.Printf("Sleeping for %s followed by gc\n", sleep) + time.Sleep(sleep) + runtime.GC() + + fmt.Printf("Dump 2\n") + if err := writeProfiles(2); err != nil { + panic(err) + } + + fmt.Printf("Waiting forever\n") + + //fmt.Printf("waiting indefinitely so you can press ctrl+\\ to compare the output\n") + //runtime.GC() + <-errCh +} + +func shortSleepLoop() { + for { + time.Sleep(time.Second) + } +} + +func sleepLoop(d time.Duration) { + for { + time.Sleep(d) + } +} + +func chanReceiveForever() { + forever := make(chan struct{}) + <-forever +} + +func indirectShortSleepLoop() { + indirectShortSleepLoop2() +} + +func indirectShortSleepLoop2() { + go shortSleepLoop() +} diff --git a/goroutine-matrix.png b/goroutine-matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..b86beb30b95329aabab92bc7821ec0009c7abfd9 GIT binary patch literal 201665 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

R{m#tLVVJ#Ze)VsY2Sw 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 j3AyOdF8Kd9awc{7;8_mry#zKI`1e>|MXpH3vy< literal 0 HcmV?d00001 diff --git a/goroutine.md b/goroutine.md new file mode 100644 index 0000000..528951b --- /dev/null +++ b/goroutine.md @@ -0,0 +1,218 @@ +This document was last updated for `go1.15.6` but probably still applies to older/newer versions for the most parts. + +# Go's Goroutine Profiler + +Go has various APIs to provide users with a list of **active** goroutines, their current stack trace, as well as various other properties. Some APIs expose this information as statistical summaries, while other APIs provide information for each individual goroutine. + +Despite the differences between the APIs, the [common](https://github.com/golang/go/blob/9b955d2d3fcff6a5bc8bce7bafdc4c634a28e95b/src/runtime/mprof.go#L729) [definition](https://github.com/golang/go/blob/9b955d2d3fcff6a5bc8bce7bafdc4c634a28e95b/src/runtime/traceback.go#L931) of an **active** goroutine seems to be: + +- It's not [`dead`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L65-L71) (just exited or is being reinitialized). +- It's not a [system goroutine](https://github.com/golang/go/blob/9b955d2d3fcff6a5bc8bce7bafdc4c634a28e95b/src/runtime/traceback.go#L1013-L1021) nor finalizer goroutine. + +In other words, goroutines that are running, waiting on locks, i/o, scheduling, etc. are all considered to be active, even so one might naively not think of them as such. + +## Performance Impact + +All Goroutine profiling available in Go requires an `O(N)` **stop-the-world** phase where `N` is the number of allocated goroutines. A [naive benchmark](https://github.com/felixge/fgprof/blob/fe01e87ceec08ea5024e8168f88468af8f818b62/fgprof_test.go#L35-L78) [indicates](https://github.com/felixge/fgprof/blob/master/BenchmarkProfilerGoroutines.txt) that the world is stopped for ~1µs per goroutine when using the [runtime.GoroutineProfile()](https://golang.org/pkg/runtime/#GoroutineProfile) API. But this number is likely to fluctuate in response to other factors such as the average stack depth of the program. + +As a rule of thumb, applications that are extremely latency sensitive and make use of thousands of active goroutines might want to be a little careful with goroutine profiling in production. That being said, large number of goroutines, and perhaps even Go itself, might not be good idea for such applications to begin with. + +Most applications that can tolerate a few ms of ocassional extra latency should have no issues with continous goroutine profiling in production. + +## Goroutine Properties + +Goroutines have a lot of [properties](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L406-L486) that can help to debug Go applications. The ones below are particulary interesting and exposed via the APIs described later on in this document to varying degrees. + +- [`goid`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L428): The unique id of the goroutine, the main goroutine has id `1`. +- [`atomicstatus`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L14-L105): The status of the goroutine, one of the following: + - `idle`: just got allocated + - `runnable`: on a run queue, waiting to be scheduled + - `running`: executing on an OS thread + - `syscall`: blocked on a syscall + - `waiting`: parked by the scheduler, see `g.waitreason` + - `dead`: just exited or being reinitialized + - `copystack`: stack is currently being moved + - `preempted`: just preempted itself +- [`waitreason`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L996-L1024): The reason a goroutine is in `waiting` status, e.g. sleep, channel operations, i/o, gc, etc. +- [`waitsince`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L430): The approximate timestamp a goroutine has entered `waiting` or `syscall` status as determined by the first gc after the wait started. +- [`labels`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L472): A set of key/value [profiler labels](https://rakyll.org/profiler-labels/) that can be attached to goroutines. +- `stack trace`: The function that is currently being executed as well as its callers. This is exposed as either a plain text output of filenames, function names and line numbers or a slice of program counter addresses (pcs). 🚧 *Research more details on this, e.g. can func/file/line text be converted to pcs?* +- [`gopc`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L466): The program counter address (pc) of the `go ...` call that caused this goroutine to be created. Can be converted to the file, function name and line number. +- [`lockedm`](https://github.com/golang/go/blob/go1.15.6/src/runtime/runtime2.go#L460): The thread this goroutine is locked to, if any. + +The feature matrix below give you a quick idea on the current availability of these properties through the various APIs. Also available as a [google sheet](https://docs.google.com/spreadsheets/d/1txMRjhDA0NC9eSNRRUMMFI5uWJ3FBnACGVjXYT1gKig/edit?usp=sharing). + +![goroutine feature matrix](./goroutine-matrix.png) + +## APIs + +### [`runtime.Stack()`](https://golang.org/pkg/runtime/#Stack) / [`pprof.Lookup(debug=2)`](https://golang.org/pkg/runtime/pprof/#Lookup) + +This returns unstructured text output showing the stack of all active goroutines as well as the properties listed in the feature matrix above. + +The `waitsince` property is included as `nanotime() - gp.waitsince()` in minutes, but only if the duration exceeds 1 minute. + +`pprof.Lookup(debug=2)` is a simplified alias for how this profile is used. The actual invocation looks like this: + +```go +profile := pprof.Lookup("goroutine") +profile.WriteTo(os.Stdout, 2) +``` + +The profile implementation itself simply invokes `runtime.Stack()`. + +Below is a truncated example of the returned output, see [2.runtime.stack.txt](./examples/goroutine/2.runtime.stack.txt) for a full example. + +``` +goroutine 1 [running]: +main.glob..func1(0x14e5940, 0xc0000aa7b0, 0xc000064eb0, 0x2) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:29 +0x6f +main.writeProfiles(0x2, 0xc0000c4008, 0x1466424) + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:106 +0x187 +main.main() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:152 +0x3d2 + +goroutine 22 [sleep, 1 minutes]: +time.Sleep(0x3b9aca00) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +0xbf +main.shortSleepLoop() + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 +0x2a +created by main.indirectShortSleepLoop2 + /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:185 +0x35 + +goroutine 3 [IO wait, 1 minutes]: +internal/poll.runtime_pollWait(0x1e91e88, 0x72, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +0x55 +internal/poll.(*pollDesc).wait(0xc00019e018, 0x72, 0x0, 0x0, 0x1465786) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x45 +internal/poll.(*pollDesc).waitRead(...) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +internal/poll.(*FD).Accept(0xc00019e000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) + /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:394 +0x1fc + +... +``` + +### [`pprof.Lookup(debug=1)`](https://golang.org/pkg/runtime/pprof/#Lookup) + +This profiling method is invoked the same way as `pprof.Lookup(debug=2)`, but produces very different data: + +- Instead of listing individual goroutines, goroutines with the same stack/labels are listed once along with their count. +- pprof labels are included (`debug=2` does not include them). +- Most other goroutine properties from debug=2 are not included. +- The output format is also text based, but looks very different than `debug=2`. + +Below is a truncated example of the returned output, see [2.pprof.lookup.goroutine.debug1.txt](./examples/goroutine/2.pprof.lookup.goroutine.debug1.txt) for a full example. + +``` +goroutine profile: total 9 +2 @ 0x103b125 0x106cd1f 0x13ac44a 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x106cd1e time.Sleep+0xbe /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 +# 0x13ac449 main.shortSleepLoop+0x29 /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 + +1 @ 0x103b125 0x10083ef 0x100802b 0x13ac4ed 0x106fd81 +# labels: {"test_label":"test_value"} +# 0x13ac4ec main.chanReceiveForever+0x4c /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 + +1 @ 0x103b125 0x103425b 0x106a1d5 0x10d8185 0x10d91c5 0x10d91a3 0x11b8a8f 0x11cb72e 0x12df52d 0x11707c5 0x117151d 0x1171754 0x1263c2c 0x12d96ca 0x12d96f9 0x12e09ba 0x12e5085 0x106fd81 +# 0x106a1d4 internal/poll.runtime_pollWait+0x54 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/netpoll.go:222 +# 0x10d8184 internal/poll.(*pollDesc).wait+0x44 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:87 +# 0x10d91c4 internal/poll.(*pollDesc).waitRead+0x1a4 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_poll_runtime.go:92 +# 0x10d91a2 internal/poll.(*FD).Read+0x182 /usr/local/Cellar/go/1.15.6/libexec/src/internal/poll/fd_unix.go:159 +# 0x11b8a8e net.(*netFD).Read+0x4e /usr/local/Cellar/go/1.15.6/libexec/src/net/fd_posix.go:55 +# 0x11cb72d net.(*conn).Read+0x8d /usr/local/Cellar/go/1.15.6/libexec/src/net/net.go:182 +# 0x12df52c net/http.(*connReader).Read+0x1ac /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:798 +# 0x11707c4 bufio.(*Reader).fill+0x104 /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:101 +# 0x117151c bufio.(*Reader).ReadSlice+0x3c /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:360 +# 0x1171753 bufio.(*Reader).ReadLine+0x33 /usr/local/Cellar/go/1.15.6/libexec/src/bufio/bufio.go:389 +# 0x1263c2b net/textproto.(*Reader).readLineSlice+0x6b /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:58 +# 0x12d96c9 net/textproto.(*Reader).ReadLine+0xa9 /usr/local/Cellar/go/1.15.6/libexec/src/net/textproto/reader.go:39 +# 0x12d96f8 net/http.readRequest+0xd8 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/request.go:1012 +# 0x12e09b9 net/http.(*conn).readRequest+0x199 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:984 +# 0x12e5084 net/http.(*conn).serve+0x704 /usr/local/Cellar/go/1.15.6/libexec/src/net/http/server.go:1851 + +... +``` + +### [`pprof.Lookup(debug=0)`](https://golang.org/pkg/runtime/pprof/#Lookup) + +This profiling method is invoked the same way as `pprof.Lookup(debug=1)`, and produces the same data. The only difference is that the data format is the [pprof](./pprof.md) protocol buffer format. + +Below is a truncated example of the returned output as reported by `go tool pprof -raw`, see [2.pprof.lookup.goroutine.debug0.pb.gz](./examples/goroutine/2.pprof.lookup.goroutine.debug0.pb.gz) for a full example. + +``` +PeriodType: goroutine count +Period: 1 +Time: 2021-01-14 16:46:23.697667 +0100 CET +Samples: +goroutine/count + 2: 1 2 3 + test_label:[test_value] + 1: 1 4 5 6 + test_label:[test_value] + 1: 1 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + 1: 1 7 8 9 10 11 12 21 14 22 23 + test_label:[test_value] + 1: 1 7 8 9 24 25 26 27 28 29 30 + 1: 1 31 32 + test_label:[test_value] + 1: 1 2 33 + test_label:[test_value] + 1: 34 35 36 37 38 39 40 41 + test_label:[test_value] +Locations + 1: 0x103b124 M=1 runtime.gopark /usr/local/Cellar/go/1.15.6/libexec/src/runtime/proc.go:306 s=0 + 2: 0x106cd1e M=1 time.Sleep /usr/local/Cellar/go/1.15.6/libexec/src/runtime/time.go:188 s=0 + 3: 0x13ac449 M=1 main.shortSleepLoop /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:165 s=0 + 4: 0x10083ee M=1 runtime.chanrecv /usr/local/Cellar/go/1.15.6/libexec/src/runtime/chan.go:577 s=0 + 5: 0x100802a M=1 runtime.chanrecv1 /usr/local/Cellar/go/1.15.6/libexec/src/runtime/chan.go:439 s=0 + 6: 0x13ac4ec M=1 main.chanReceiveForever /Users/felix.geisendoerfer/go/src/github.com/felixge/go-profiler-notes/examples/goroutine/main.go:177 s=0 +... +Mappings +1: 0x0/0x0/0x0 [FN] +``` + +### [`runtime.GoroutineProfile()`](https://golang.org/pkg/runtime/#GoroutineProfile) + +This function essentially returns a slice of all active goroutines and their current stack trace. The stack traces are given in the form of program addresses which can be resolved to function names using [`runtime.CallersFrames()`](https://golang.org/pkg/runtime/#CallersFrames). + +This method is used by [fgprof](https://github.com/felixge/fgprof) to implement wall clock profiling. + +The following features are not available, but might be interesting to propose to the Go project in the future: + +- Include goroutine properties outlined above that are not available yet, especially labels. +- Filter by pprof labels, this could reduce stop-the-world, but would require additional book keeping by the runtime. +- Limit the number of returned goroutines to a random subset, could also reduce stop-the-world and might be easier to implement than filtering by label. + +Below is a truncated example of the returned output, see [2.runtime.goroutineprofile.json](./examples/goroutine/2.runtime.goroutineprofile.json) for a full example. + +```json +[ + { + "Stack0": [ + 20629256, + 20629212, + 20627047, + 20628306, + 17018153, + 17235329, + // ... + ] + }, + { + "Stack0": [ + 17019173, + 17222943, + 20628554, + 17235329, + // ... + ] + }, + // ... +] +``` + +### [`net/http/pprof`](https://golang.org/pkg/net/http/pprof/) + +This package exposes the [`pprof.Lookup("goroutine")`](https://golang.org/pkg/runtime/pprof/#Lookup) profiles described above via HTTP endpoints. The output is identical. \ No newline at end of file