PerformanceCounter类别即使存在也不存在

时间:2015-07-10 19:44:10

标签: c# windows performance azure monitoring

我的IIS Web计算机上运行了Azure Web角色和单独的Windows服务。 Web角色创建自定义性能计数器类别和两个计数器。我试图从我的Windows服务中读取性能计数器。即使PerformanceCounterCategory.Exists(categoryName)返回trueGetCounters方法也会引发异常Category does not exist(请参阅更新)。

if (PerformanceCounterCategory.Exists(categoryName))
{
    try
    {
        // Get the existing category and counters
        PerformanceCounterCategory existingCategory = new PerformanceCounterCategory(categoryName);
        counters = existingCategory.GetCounters();
    }
    catch (Exception e)
    {
        Debug.WriteLine("Failed to read the performance category {0}. Exception: {1}", categoryName, e.Message);
    }
}

Windows服务作为本地系统服务运行,因此它应具有我认为的权限。实际上,我可以通过Visual Studio的服务器资源管理器查看性能类别和计数器。

如果类别不存在,我认为PerformanceCounterCategory.Exists(categoryName)首先会失败,对吗?

更新

  • 我看到GetCounters方法抛出InvalidOperationException并发送消息Could not Read Category Index: {some index here}.
  • Similar issue发布在msdn论坛上
  • 同样的过程可以很好地读取计数器。

1 个答案:

答案 0 :(得分:0)

我们遇到了同样的问题。 实际WindowsInstance中的整个PerformanceCounters出了点问题。 我们通过以下CMD命令(以管理员身份运行)解决了该问题:

lodctr /R

它从一些备份存储中重建了PerformanceCounters。

如果它不能解决您的问题,则可以尝试此操作(同样具有管理员权限的CMD):

Winmgmt /resyncperf 
Net stop winmgmt /y 
Net start winmgmt

来源:https://thwack.solarwinds.com/thread/43987