.net - 为什么perfmon无法看到我的自定义性能计数器的实例?

标签 .net perfmon

我正在为应用程序创建一些自定义性能计数器。我编写了一个简单的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/

相关文章:

performance - Windows XP 性能监视器应用程序 (perfmon) 中缺少处理器/内存计数器

c# - 删除性能计数器类别失败

C# 体系结构指南与 JavaEE

c# - 使用C#在Windows 7中模拟鼠标点击和鼠标移动

c# - 我是否需要在 Windows Phone 应用程序中调用 IsolatedStorageSettings.Save 方法?

performance - perfmon如何获取 "in Use"内存

c# - 是否有 WCF 服务请求队列性能计数器?

c# - 如何将 EntityCollection 属性分配给另一个属性?

c# - Azure 云服务托管本地应用程序服务器

c# - 性能计数器 NextValue() 非常慢(1,000 多个计数器)