2
要配置我的應用程序,我想知道有多少goroutines正在等待寫入頻道或從頻道讀取頻道;我找不到reflect
package中的任何相關內容。獲取等待寫入/讀取頻道的goroutines數量(用於配置文件)
我當然可以維持一個明確的計數器,但我希望golang運行時知道這一點,所以我儘量避免重新發明輪子。
那麼,有沒有辦法做到這一點,而無需手動維護計數器?
要配置我的應用程序,我想知道有多少goroutines正在等待寫入頻道或從頻道讀取頻道;我找不到reflect
package中的任何相關內容。獲取等待寫入/讀取頻道的goroutines數量(用於配置文件)
我當然可以維持一個明確的計數器,但我希望golang運行時知道這一點,所以我儘量避免重新發明輪子。
那麼,有沒有辦法做到這一點,而無需手動維護計數器?
要跟蹤整個負載,你可能正在爲runtime.NumGoroutine()
https://golang.org/pkg/runtime/#NumGoroutine
雖然它不完全數字只是封鎖圍棋的套路應該是非常接近它,而不是超過runtime.NumGoroutine() - GOMAXPROCS
對於跟蹤每個頻道的例行程序你可以做下一步:
http/pprof
可獲取有關當前配置文件和解析輸出的信息 - 請參閱此答案以瞭解詳細信息https://stackoverflow.com/a/38414527/1975086。或者,也許您可以查看http/pprof
並瞭解它如何獲取信息,以便您可以以鍵入的方式在您的應用程序中獲取它。
謝謝,但它並沒有解決問題:顯然我有我的應用程序中有多個頻道,並且goroutines正在等待不同的頻道,所以我需要看看他們正在等待哪些頻道,將能夠發現瓶頸。 –
對,我會更新我的答案。 –
你不需要使用'net/http/pprof'來獲取一個「block」配置文件,如果你不需要http處理器,你可以直接從'runtime/pprof'中執行。 – JimB