获取等待写入/读取通道的goroutines数量(用于分析)

时间:2017-09-22 08:08:03

标签: go profiling channel goroutine

要分析我的应用,我想知道有多少goroutine正在等待写入或从频道读取;我在reflect package中找不到任何相关内容。

我当然可以保持一个明确的反击,但我希望golang运行时知道,所以我尽量避免重新发明轮子。

那么,有没有办法在不手动维护计数器的情况下做到这一点?

1 个答案:

答案 0 :(得分:1)

要跟踪整体负载,您可能正在寻找runtime.NumGoroutine()

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

虽然它不完全是被阻止的Go例程的数量,但它应该非常接近并且不超过runtime.NumGoroutine() - GOMAXPROCS

对于跟踪每个频道的转化套路,您可以执行下一步操作:

  1. 使用https://golang.org/pkg/runtime/pprof/#Do标记具有特定频道的例程。
  2. 使用http/pprof获取有关当前配置文件和解析输出的信息 - 有关详细信息https://stackoverflow.com/a/38414527/1975086,请参阅此答案。或者也许您可以查看http/pprof并了解它是如何获取信息的,这样您就可以通过打字方式在应用中获取信息。