如何在.NET中检测当前的进程/线程饥饿

时间:2012-06-17 08:38:05

标签: .net windows monitoring cpu scheduler

我正在开发一个软实时应用程序,该应用程序部署到许多服务器,这些服务器由于其他进程而具有不同的负载量。我们已经确定,至少在一个设置中,性能因缺乏足够的cpu资源而受阻。

据我所知,在Windows上,线程/进程可以进入Ready状态,如果cpu不可用,它将保持该状态。

我有点希望会有一个类似Process.Current.ReadyTime的调用,它允许我检查并监视这种情况并在应用程序日志中引发警告/错误。你可以在一个已知的时间段内采用delta,并设置一个阈值,例如你可以忍受处于Ready状态的时间。

我很难找到任何直接或间接的方法来获得它。有没有人有任何想法如何实现这个或类似的东西?

TL; DR - 我们正在寻找一种方法让线程/进程检查它处于Ready状态的时间长度(即已完成工作但没有cpu可用)

谢谢,

G-曼

2 个答案:

答案 0 :(得分:2)

我不认为有像Process.Current.ReadyTime这样的属性(但也许在Windows性能计数器中有适合您需求的东西?),但对于线程,您可以使用ThreadState enumeration

  

<强>就绪   指示线程正在等待使用处理器的状态,因为没有处理器是空闲的。该线程准备在下一个可用的处理器上运行。

     

正在运行表示线程当前正在使用处理器的状态。

您可以创建一个监视器线程,其作用只是遍历应用程序的所有线程并记录其状态或计算它们在就绪状态下所花费的时间。

答案 1 :(得分:0)

框架中没有类似内容,但可能值得搜索WMI

我知道WMI公开了PercentProcessorTime,它告诉你处理器空闲的时间百分比。

这可以让您了解机器上的CPU负载,这将为您提供间接线索。