我正在为应用程序创建一些自定义性能计数器。我编写了一个简单的C#工具来创建类别和计数器。例如,下面的代码片段基本上就是我正在运行的代码。然后,我运行一个单独的应用程序,该应用程序会不断刷新计数器的原始值。在运行时,计数器和虚拟实例可以在perfmon中本地看到。
我遇到的问题是,当从另一台服务器远程查看时,我们使用的监视系统无法在我创建的多实例计数器中看到实例。使用perfmon浏览计数器时,我可以看到类别和计数器,但是“实例”框显示为灰色,我什至不能选择“所有实例”,也不能单击“添加”。使用其他访问方法(例如[typeperf][1]
)也会遇到类似的问题。
我不确定这是服务器还是代码问题。这只能在我需要的生产环境中重现。在我的台式机和开发服务器上,它运行良好。我是所有服务器上的本地管理员。
CounterCreationDataCollection collection = new CounterCreationDataCollection();
var category_name = "My Application";
var counter_name = "My counter name";
CounterCreationData ccd = new CounterCreationData();
ccd.CounterType = PerformanceCounterType.RateOfCountsPerSecond64;
ccd.CounterName = counter_name;
ccd.CounterHelp = counter_name;
collection.Add(ccd);
PerformanceCounterCategory.Create(category_name, category_name, PerformanceCounterCategoryType.MultiInstance, collection);
然后,在一个单独的应用程序中,我运行它来生成虚拟实例数据:
var pc = new PerformanceCounter(category_name, counter_name, instance_name, false);
while (true) {
pc.RawValue = 0;
Thread.Sleep(1000);
}
最佳答案
您的程序碰巧是在Windows 2008 R2或其他64位Windows OS上运行的32位程序吗?如果是这样,您可能要检查服务“性能计数器DLL主机”是否正在运行。此服务使64位和远程进程能够查询32位进程提供的计数器。
关于.net - 为什么perfmon无法看到我的自定义性能计数器的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1208385/