0

我正在使用Docker Desktop for Windows在 windows docker 容器中运行 .net 应用程序。当我的应用程序尝试使用此代码创建性能计数器时:

_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, String category, String counter) 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 核心作为其中的一部分。

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

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

4

1 回答 1

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"

于 2017-04-25T16:56:01.020 回答