2017-03-01 31 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"

相關問題