我们今天在api中遇到了这些奇怪的问题,这些问题是由线程池饥饿引起的。我们花了很多时间来解决这个问题。
所以我在想,这是什么方法?我知道我可以使用perfview之类的工具,但是这些错误通常只发生在prod中,因此很难在事后转储perf测试以对其进行分析。
我知道一些电话,例如:
ThreadPool.GetAvailableThreads(out workers, out ports);
但是,我返回的结果只是一个任意高的数字,例如32766。实际上(据我们了解),问题通常不是最大线程大小,而是.Net限制了新线程数量的事实。线程,它将每秒旋转。
所以我对测量感兴趣:
-我的应用程序当前正在使用多少个工作者线程?
-平均一秒钟要花多少时间等待可用线程?
我希望有一些Threadpool api或其他类型的api可以获取这些指标的“实时”指标,以便我可以使用Prometheus或类似方法向我们的监控系统报告。
这只是在黑暗中的镜头,任何指针都值得赞赏!