使用 WMI 或 Perfmon 进行监控(在 .NET 中以编程方式)
Monitoring using WMI or Perfmon (programmatically in .NET)
我需要开发一个代理 windows 服务,它将始终只监视当前安装的机器中的资源。受监控的资源可能是处理器健康状况、SNMP 陷阱、SQL 服务器健康状况。
我发现这可以在 .NET 中使用 WMI 或 Perfmon 以编程方式实现。
我不确定使用哪一个。我正在寻找优点和缺点,以及在哪种情况下我们需要为每个选项选择。
通常,如果 Perform 中有可用的计数器,我会从那里开始,但您至少会同时使用 Perform 和 WMI。例如:
如果我想监控机器上使用的总内存百分比,我会使用 Perfmon 计数器 "Memory,Available Kbytes"。我还将使用 WMI 沿着以下几行获取机器上的总内存:
new ManagementObjectSearcher("root\CIMV2", "select * from win32_computersystem")
然后将总物理内存 属性 存储到名为 totalKBytes 的变量中。
现在,每当我想计算使用的内存百分比时,我都会进行计算:
(1.0f - (counter.NextValue() / totalKBytes)) * 100.0f
结论是不要在 Perform 或 WMI 之间犹豫不决。您将至少需要它们。一旦真正开始监控,您可能还会发现自己正在读取注册表、运行 自定义脚本、读取文件系统等。
我需要开发一个代理 windows 服务,它将始终只监视当前安装的机器中的资源。受监控的资源可能是处理器健康状况、SNMP 陷阱、SQL 服务器健康状况。
我发现这可以在 .NET 中使用 WMI 或 Perfmon 以编程方式实现。
我不确定使用哪一个。我正在寻找优点和缺点,以及在哪种情况下我们需要为每个选项选择。
通常,如果 Perform 中有可用的计数器,我会从那里开始,但您至少会同时使用 Perform 和 WMI。例如:
如果我想监控机器上使用的总内存百分比,我会使用 Perfmon 计数器 "Memory,Available Kbytes"。我还将使用 WMI 沿着以下几行获取机器上的总内存:
new ManagementObjectSearcher("root\CIMV2", "select * from win32_computersystem")
然后将总物理内存 属性 存储到名为 totalKBytes 的变量中。
现在,每当我想计算使用的内存百分比时,我都会进行计算:
(1.0f - (counter.NextValue() / totalKBytes)) * 100.0f
结论是不要在 Perform 或 WMI 之间犹豫不决。您将至少需要它们。一旦真正开始监控,您可能还会发现自己正在读取注册表、运行 自定义脚本、读取文件系统等。