我在带有 Docker Desktop for Windows 的Windows docker容器中运行.net应用程序。当我的应用尝试使用此代码创建perf计数器时:
_counter = new PerformanceCounter(categoryName, counterName, InstanceName, true);
//My categoryname is Processor , CounterName is % Processor Time & instancename is _Total.
我得到了这个例外:
未处理的异常:System.InvalidOperationException:类别 不存在。在 System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, 字符串类别,字符串计数器)at System.Diagnostics.PerformanceCounter.InitializeImpl()at System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName,String instanceName,Boolean readOnly)
这是我的容器的基本图片:https://hub.docker.com/r/microsoft/dotnet-framework/
它有Windows Server核心作为其中的一部分。
感谢您解决此问题的任何帮助。我不确定这是否只是一些窗口设置我需要在这里更改,还是因为docker& Windows或我的代码无法访问perf计数器的类别。
当我在本地机器而不是容器中运行时,它工作得非常好。
答案 0 :(得分: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"