2017-09-22 39 views

回答

1

要跟蹤整個負載,你可能正在爲runtime.NumGoroutine()

https://golang.org/pkg/runtime/#NumGoroutine

雖然它不完全數字只是封鎖圍棋的套路應該是非常接近它,而不是超過runtime.NumGoroutine() - GOMAXPROCS

對於跟蹤每個頻道的例行程序你可以做下一步:

  1. 使用https://golang.org/pkg/runtime/pprof/#Do標記具有特定通道的例程。
  2. 使用http/pprof可獲取有關當前配置文件和解析輸出的信息 - 請參閱此答案以瞭解詳細信息https://stackoverflow.com/a/38414527/1975086。或者,也許您可​​以查看http/pprof並瞭解它如何獲取信息,以便您可以以鍵入的方式在您的應用程序中獲取它。
+0

謝謝,但它並沒有解決問題:顯然我有我的應用程序中有多個頻道,並且goroutines正在等待不同的頻道,所以我需要看看他們正在等待哪些頻道,將能夠發現瓶頸。 –

+0

對,我會更新我的答案。 –

+0

你不需要使用'net/http/pprof'來獲取一個「block」配置文件,如果你不需要http處理器,你可以直接從'runtime/pprof'中執行。 – JimB