查找谁启动了一个 goroutine(pprof)

huangapple go评论115阅读模式
英文:

Find out who started a goroutine (pprof)

问题

当检查pprof的输出时,我可以看到一个goroutine的堆栈跟踪。然而,我想知道是谁启动(生成)了这个goroutine,这可能吗?

英文:

When examining the output of pprof I can see the stacktrace of a goroutine. However I'd like to know who started (spawned?) this goroutine, is this possible?

答案1

得分: 1

如果您查看端点/debug/pprof/goroutine?debug=2,您将获得稍微不同的堆栈跟踪输出:

  1. goroutine 859579 [running]:
  2. runtime/pprof.writeGoroutineStacks(0x176a0e0, 0xc43403a340, 0x178d740, 0x30)
  3. /usr/local/go/src/runtime/pprof/pprof.go:585 +0x79
  4. runtime/pprof.writeGoroutine(0x176a0e0, 0xc43403a340, 0x2, 0x0, 0xd)
  5. /usr/local/go/src/runtime/pprof/pprof.go:574 +0x44
  6. runtime/pprof.(*Profile).WriteTo(0x178f9e0, 0x176a0e0, 0xc43403a340, 0x2, 0xc43403a340, 0xc4587b5834)
  7. /usr/local/go/src/runtime/pprof/pprof.go:298 +0x341
  8. net/http/pprof.handler.ServeHTTP(0xc4587b5841, 0x9, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  9. /usr/local/go/src/net/http/pprof/pprof.go:209 +0x1a6
  10. net/http/pprof.Index(0x1771320, 0xc43403a340, 0xc49a7093b0)
  11. /usr/local/go/src/net/http/pprof/pprof.go:221 +0x205
  12. net/http.HandlerFunc.ServeHTTP(0x12664a8, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  13. /usr/local/go/src/net/http/server.go:1726 +0x44
  14. net/http.(*ServeMux).ServeHTTP(0x179dde0, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  15. /usr/local/go/src/net/http/server.go:2022 +0x7f
  16. net/http.serverHandler.ServeHTTP(0xc46d06ed80, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  17. /usr/local/go/src/net/http/server.go:2202 +0x7d
  18. net/http.(*conn).serve(0xc45dc83180, 0x17734a0, 0xc4942f0600)
  19. /usr/local/go/src/net/http/server.go:1579 +0x4b7
  20. created by net/http.(*Server).Serve
  21. /usr/local/go/src/net/http/server.go:2293 +0x44d

其中包括最后的created by行。

英文:

If you look at the endpoint /debug/pprof/goroutine?debug=2 you get a slightly different output for the stack traces:

  1. goroutine 859579 [running]:
  2. runtime/pprof.writeGoroutineStacks(0x176a0e0, 0xc43403a340, 0x178d740, 0x30)
  3. /usr/local/go/src/runtime/pprof/pprof.go:585 +0x79
  4. runtime/pprof.writeGoroutine(0x176a0e0, 0xc43403a340, 0x2, 0x0, 0xd)
  5. /usr/local/go/src/runtime/pprof/pprof.go:574 +0x44
  6. runtime/pprof.(*Profile).WriteTo(0x178f9e0, 0x176a0e0, 0xc43403a340, 0x2, 0xc43403a340, 0xc4587b5834)
  7. /usr/local/go/src/runtime/pprof/pprof.go:298 +0x341
  8. net/http/pprof.handler.ServeHTTP(0xc4587b5841, 0x9, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  9. /usr/local/go/src/net/http/pprof/pprof.go:209 +0x1a6
  10. net/http/pprof.Index(0x1771320, 0xc43403a340, 0xc49a7093b0)
  11. /usr/local/go/src/net/http/pprof/pprof.go:221 +0x205
  12. net/http.HandlerFunc.ServeHTTP(0x12664a8, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  13. /usr/local/go/src/net/http/server.go:1726 +0x44
  14. net/http.(*ServeMux).ServeHTTP(0x179dde0, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  15. /usr/local/go/src/net/http/server.go:2022 +0x7f
  16. net/http.serverHandler.ServeHTTP(0xc46d06ed80, 0x1771320, 0xc43403a340, 0xc49a7093b0)
  17. /usr/local/go/src/net/http/server.go:2202 +0x7d
  18. net/http.(*conn).serve(0xc45dc83180, 0x17734a0, 0xc4942f0600)
  19. /usr/local/go/src/net/http/server.go:1579 +0x4b7
  20. created by net/http.(*Server).Serve
  21. /usr/local/go/src/net/http/server.go:2293 +0x44d

That include the created by line at the end.

huangapple
  • 本文由 发表于 2017年1月5日 23:48:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/41489148.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定