Windows 确定“;系统负载”;
是否有人知道一种优雅的方法来确定“系统负载”,最好使用Windows性能计数器?在本例中,我指的是经典(UNIX)意义上的“系统负载”,而不是通常混淆的“CPU利用率”百分比 根据我的阅读,“系统负载”通常表示为一个浮点,定义在给定时间可以运行的处于可运行状态的进程数(即不包括当前由于某种原因被阻止的进程数)。维基百科在这里给出了一个很好的解释-Windows 确定“;系统负载”;,windows,load,system,Windows,Load,System,是否有人知道一种优雅的方法来确定“系统负载”,最好使用Windows性能计数器?在本例中,我指的是经典(UNIX)意义上的“系统负载”,而不是通常混淆的“CPU利用率”百分比 根据我的阅读,“系统负载”通常表示为一个浮点,定义在给定时间可以运行的处于可运行状态的进程数(即不包括当前由于某种原因被阻止的进程数)。维基百科在这里给出了一个很好的解释- 顺便说一句,我是用C语言工作的,所以任何用这种语言的例子都将不胜感激 系统负载,在UNIX意义上(如果我没记错的话),是能够运行的进程的数量,而这些进
顺便说一句,我是用C语言工作的,所以任何用这种语言的例子都将不胜感激 系统负载,在UNIX意义上(如果我没记错的话),是能够运行的进程的数量,而这些进程实际上不是在CPU上运行的(在一段时间内的平均值)。类似于
top
的实用程序显示了过去1、5和15分钟的负载
我认为这在标准Win32 WMI进程类中是不可能的。WMIWin32\u进程
对象中的进程状态字段(ExecutionState)
记录为未使用
然而,thread类确实提供了这些信息(这可能是一个更好的指标,因为现代操作系统倾向于调度线程而不是进程)。Win32\u Thread
类有一个ExecutionState
字段,该字段设置为以下字段之一:
- 0未知
- 1其他
- 2准备好了吗
- 3运行
- 4阻塞
- 5.暂停开放
- 6暂停准备就绪
ThreadState
:
- 0已初始化(由微核识别)
- 1就绪(准备在下一个可用处理器上运行)
- 2正在运行(正在执行)
- 3备用(即将运行,一次只能有一个线程处于此状态)
- 4终止(已完成执行)
- 5等待(处理器未准备就绪,准备就绪后将重新安排)
- 6转换(等待处理器以外的资源)
- 7未知(状态未知)。 所以你可以考虑把那些处于状态1或状态3的人计算在内
这个问题可能会在他特别要求C时得到更好的回答,所以正确的地点也是如此。谢谢你的回答,这很有帮助。但是,我有一个后续问题,如果我正确地回忆起使用系统显示时的负载,例如“top”表示浮点值(即1.35或5.45)。在您的示例中,您只能得到系统负载的整数。知道分数是从哪里来的吗?没关系。。。我愚蠢的。。。这些值是1、5和15分钟内的平均值。出于某种原因,我一直认为第一个值实际上是一个时间点,而不是一段时间内的平均值。
set objWmi = GetObject("winmgmts:\\.\root\cimv2")
set threadList = objWmi.ExecQuery("select * from Win32_Thread",,48)
sysLoad = 0
for each objThread in threadList
if objThread.ThreadState = 1 or objThread.ThreadState = 3 then
sysLoad = sysLoad + 1
end if
next
' sysLoad now contains number of threads waiting for a CPU. '