+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 在没有 WMI 的 Windows 中查找 MaxNumberOfProcesses >

在没有 WMI 的 Windows 中查找 MaxNumberOfProcesses

时间:2024-04-07 10:23:35

本篇文章来介绍《在没有 WMI 的 windows 中查找 MaxNumberOfProcesses》,涉及到,有需要的可以收藏一下

问题内容
我们的监控解决方案目前使用 wmi 来实现一些指标,但是当负载不足时,wmi 的表现非常糟糕,并且经常无法及时返回,从而导致大量关于各种离线或缺失指标的错误警报。

通过调用 psapi.h、sysinfoapi.h 等中的 windows 函数来替换 wmi 查询已经解决了其中的大部分问题,并且返回速度提高了大约 100 倍,但是我无法找到一种方法来获取 wmi 查询的等效值win32_operatingsystem.maxnumberofprocesses

windows 文档中的定义如下:

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 主机 mib 的方法,但除了使用一些外部工具(而不是直接通过代码)之外,找不到任何详细信息。

我目前正在使用 c 库使用 Go 语言进行编程。

如果有人能够深入了解如何在不使用 wmi 的情况下检索此值,我们将不胜感激。


解决方案

您可以使用 cim_operatingsystem 类 cim(通用信息模型)https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/cim-operatingsystem

[Abstract, UUID("{8502C565-5FBB-11D2-AAC1-006008C78BC7}"), AMENDMENT]
class CIM_OperatingSystem : CIM_LogicalElement
{
  string   Caption;
  string   CreationClassName;
  string   CSCreationClassName;
  string   CSName;
  sint16   CurrentTimeZone;
  string   Description;
  boolean  Distributed;
  uint64   FreePhysicalMemory;
  uint64   FreeSpaceInPagingFiles;
  uint64   FreeVirtualMemory;
  datetime InstallDate;
  datetime LastBootUpTime;
  datetime LocalDateTime;
  uint32   MaxNumberOfProcesses;   <----------------------------------------
  uint64   MaxProceSSMemorySize;
  string   Name;
  uint32   NumberOfLicensedUsers;
  uint32   NumberOfProcesses;
  uint32   NumberOfUsers;
  uint16   OSType;
  string   OtherTypeDescription;
  uint64   SizeStoredInPagingFiles;
  string   Status;
  uint64   TotalSwapSpaceSize;
  uint64   TotalVirtualMemorySize;
  uint64   TotalVisibleMemorySize;
  string   Version;
};
如果机器上进程数不限制maxnumberofprocesses为0

关于wmi和cim之间的关系见Https://www.red-gate.com/simple-talk/sysadmin/powershell/powershell-day-to-day-admin-tasks-wmi,-cim-and-pswa/

通用信息模型

命名空间:https://wutils.com/wmi/root/cimv2/properties/maxnumberofprocesses.html

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title