【发布时间】:2017-03-02 22:23:41
【问题描述】:
所以,我的工作场所终于开始用 Windows 7 替换 Windows NT 4 系统。而且我必须确保我们的旧程序可以在新系统上运行。
不支持的是“性能检查”服务,它跟踪内存、CPU、磁盘和网络使用情况。它严重依赖性能计数器。
我的问题是,在新的 Windows 7 机器上,一些性能计数器不再起作用:尝试读取值时出现PDH_INVALID_DATA 错误。该问题特别影响以下计数器:
\Network Interface(*)\Bytes Total/sec
\PhysicalDisk(_Total)\% Disk Time
\PhysicalDisk(_Total)\Avg. Disk Queue Length
\PhysicalDisk(_Total)\Disk Transfers/sec
\Processor(_Total)\% Processor Time
\Server\Bytes Total/sec
但是同一程序中使用的其他计数器确实可以工作(经过一些小的修改以处理“TCP”计数器被拆分为“TCPv4”和“TCPv6”)。
\Memory\Commit Limit
\Memory\Committed Bytes
\Process(_Total)\Thread Count
\TCPv4\Connections Established
\TCPv4\Segments/sec
所涉及的代码(通过只显示一个性能计数器来简化)是:
HQUERY hQuery;
HCOUNTER hCPUUsed;
DWORD dwType;
PDH_FMT_COUNTERVALUE stCounter;
lStatus = PdhOpenQuery(NULL, 0, &hQuery); // This same HQUERY object is used for all PDH calls
// ... error handling
lStatus = PdhAddCounter(hQuery, "\\Processor(_Total)\\% Processor Time", 0, &hCPUUsed);
// ... error handling
lStatus = PdhGetFormattedCounterValue(hCPUUsed, PDH_FMT_DOUBLE, &dwType, &stCounter);
// ... error handling, logging a PDH_INVALID_DATA error from the above line
我尝试运行 lodctr /r 来重建性能计数器,但这未能解决问题。
NT 4.0 和 6.1 之间是否发生了某些变化,导致这些性能计数器不再起作用?我怎样才能让它们工作?
【问题讨论】:
标签: windows performancecounter