Windows RPC tuning

本文关键字:tuning RPC Windows | 更新日期: 2023-09-27 18:31:35

我正在使用WMI监视数百个主机。我大约每 5 秒轮询一次 CPU 使用率。我正在使用 C# 的线程池来运行当前计划的相应 WMI 查询。通常,运行查询的线程不超过 30 个左右。有时有 16 秒的差距,而不是 5 秒,没有可见的 CPU 使用率。由于 CPU 未充分利用,我怀疑瓶颈出在 RPC 或 TCP/IP 堆栈中。但是我认为它不是TCP/IP堆栈,因为连接永久保持打开状态。所以我怀疑瓶颈出在监控机上的RPC中。

我可以在监控计算机上进行任何 RPC 调整吗?

更新 1:

在发布之前,我已经做了一些 .NET 调整。我已经用ThreadPool.SetMinThreads(200, 200)ThreadPool.SetMaxThreads(300,300)的电话调整了ThreadPool。我正在使用Task对象,所有对象都是用TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness创建的。

Windows RPC tuning

我正在使用 C# 的线程池

如果您正在运行执行大量阻塞且执行很少的代码,这不是一个好主意。 就像 WMI 查询一样。 线程池调度程序尝试将执行线程数限制为计算机上的内核数。 这是一种优化,它减少了线程上下文切换损失的开销。 但它无法预测或检测线程实际上并未执行代码。 它有一个自适应调度算法来处理它,允许额外的线程在现有线程未完成时执行,但运行缓慢。

您可以调用 ThreadPool.SetMinThread() 来增加允许并发执行的线程数。 默认值为内核数。 将其增加到 30 可以解决您的问题,但会产生全局副作用。 使用线程而不是线程池是一种本地解决方案。