我的IIS Web计算机上运行了Azure Web角色和单独的Windows服务。 Web角色创建自定义性能计数器类别和两个计数器。我试图从我的Windows服务中读取性能计数器。即使PerformanceCounterCategory.Exists(categoryName)
返回true
,GetCounters
方法也会引发异常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}.
。答案 0 :(得分:0)
我们遇到了同样的问题。 实际WindowsInstance中的整个PerformanceCounters出了点问题。 我们通过以下CMD命令(以管理员身份运行)解决了该问题:
lodctr /R
它从一些备份存储中重建了PerformanceCounters。
如果它不能解决您的问题,则可以尝试此操作(同样具有管理员权限的CMD):
Winmgmt /resyncperf
Net stop winmgmt /y
Net start winmgmt