【发布时间】:2021-04-16 22:12:21
【问题描述】:
我们的监控解决方案目前使用 WMI 来处理它的一些指标,但是当负载不足时,WMI 表现非常糟糕并且经常无法及时返回,从而导致大量关于各种事物脱机或缺少指标的错误警报。
将 WMI 查询替换为调用 psapi.h、sysinfoapi.h 等中的 windows 函数已解决了其中的大部分问题,并且返回速度提高了大约 100 倍,但是我无法找到一种方法来获得 WMI 查询的等效值Win32_OperatingSystem.MaxNumberOfProcesses
windows 文档here 中的定义指出:
MaxNumberOfProcesses
Data type: uint32
Access type: Read-only
Qualifiers: MappingStrings ("MIB.IETF|HOST-RESOURCES-MIB.hrSystemMaxProcesses")
Maximum number of process contexts the operating system can support.
The default value set by the provider is 4294967295 (0xFFFFFFFF). If there is no fixed maximum, the value should be 0 (zero). On systems that have a fixed maximum, this object can help diagnose failures that occur when the maximum is reached—if unknown, enter 4294967295 (0xFFFFFFFF).
This property is inherited from CIM_OperatingSystem.
我已经在大约 10 台不同的机器上测试了这个值,每台机器都有不同数量的 CPU 和 RAM,所有这些机器都返回了上述默认值 4294967295 (0xFFFFFFFF)。我是假设 Windows 实际上只是直接发回这个值,还是应该返回 ULONG_MAX 的值,还是有另一种方法可以找到这个值应该是什么?
我试图找出一种方法来访问 Windows 的 HOST MIB,但除了使用一些外部工具而不是直接通过代码之外,找不到任何详细信息。
我目前正在使用 GO 语言进行编程,使用 C 库。
如果有人能提供有关如何在不使用 WMI 的情况下检索此值的见解,将不胜感激。
【问题讨论】:
-
Windows 没有设置最大值,实际限制是“内存允许”。详情are here。提出了为什么这个属性甚至存在的问题,它在 unix 上确实很重要。如此简单的解决方案:查询它没有意义。
-
@HansPassant 感谢您的信息。我之前浏览过那个帖子,但是当看到查询的实际内容时它仍然没有意义,并且文档指出如果没有固定的最大值,它应该设置为 0,这显然不是案子。我想我只是假设 Windows 返回默认值,因为它是“内存允许的”。谢谢