2017-03-01 37 views
0

我在Windows Docker容器中运行.net应用程序。当我的应用程序试图创建使用此代码PERF的计数器:Docker容器上的Windows Perf计数器:System.InvalidOperationException:类别不存在

_counter = new PerformanceCounter(categoryName, counterName, InstanceName, true); 
//My categoryname is Processor , CounterName is % Processor Time & instancename is _Total. 

我得到这个异常:

未处理的异常:System.InvalidOperationException:类别不 不存在。在在 System.Diagnostics.PerformanceCounter.InitializeImpl()在 System.Diagnostics.PerformanceCounter..ctor(字符串类别名称, 字符串counterName,字符串 System.Diagnostics.PerformanceCounterLib.CounterExists(字符串机, 字符串类别,字符串计数器)实例名,布尔只读)

这是我的容器底部图像:https://hub.docker.com/r/microsoft/dotnet-framework/

它的Windows服务器核心作为它的一部分。

感谢任何帮助解决此问题。我不确定这是否只是一些窗口设置,我需要在这里更改,或者是因为docker &窗口或我的代码无法访问perf计数器的类别。

它运行得很好,当我在本地机器而不是容器中运行它时。

+0

我想通了几件事情: 1.这实际上意味着类别处理器并不存在于我的操作系统的某些原因。当我试图通过此代码列出所有性能类别时: PerformanceCounterCategory [] categories = PerformanceCounterCategory.GetCategories(); foreach(类别中的PerformanceCounterCategory类别) Console.WriteLine(“Category name:{0}”,category.CategoryName); } 没有称为处理器的类别。为什么在Windows Server 2016中缺少它? – ashok

回答

0

据我所知这些应该工作。

你可以尝试使用TypePerf查询这些计数器吗?当我在Windows Server核心基本映像上查询它们时,我在系统上看到它们。他们是否在你建造的容器中破碎?

docker run microsoft/windowsservercore TypePerf "\Processor(*)\% Processor Time"

确实显示CPU使用率: "(PDH-CSV 4.0)","\\DF4E02B31BBD\Processor(0)\% Processor Time","\\DF4E02B31BBD\Processor(1)\% Processor Time","\\DF4E02B31BB D\Processor(_Total)\% Processor Time" "04/25/2017 09:52:34.412","50.536535","38.170669","44.353602" "04/25/2017 09:52:35.423","19.583557","2.572386","11.077971" "04/25/2017 09:52:36.425","39.207660","50.119106","44.663383" "04/25/2017 09:52:37.453","31.606146","43.765053","37.685600"

相关问题