2017-03-01 3 views
0

Windows 도커 컨테이너에서 .net 응용 프로그램을 실행하고 있습니다. 내 응용 프로그램이 코드를 사용하여 반환 한 카운터를 만들려고 할 때 :Docker 컨테이너의 Windows 성능 카운터 : System.InvalidOperationException : 범주가 없습니다.

처리되지 않은 예외 : System.InvalidOperationException : 범주 이 존재하지 않는

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

을 나는이 예외를 얻고있다. System.Diagnostics.PerformanceCounter..ctor에서 System.Diagnostics.PerformanceCounter.InitializeImpl() (문자열 categoryName이, counterName 문자열, 문자열에 System.Diagnostics.PerformanceCounterLib.CounterExists (문자열 기계 문자열 카테고리 문자열 카운터)에서 https://hub.docker.com/r/microsoft/dotnet-framework/

그것은 그것의 일환으로 윈도우 서버 코어를 가지고 : 여기서 instanceName, 부울 readOnly 인)는

이 내 컨테이너의 기본 이미지입니다.

이 문제를 해결하는 데 도움을 주셔서 감사합니다. 이것이 내가 바꿀 필요가있는 몇 가지 윈도우 설정이라면 확실하지 않습니다. 도커 덕분에 & 윈도우 나 코드가 퍼펙트 카운터의 카테고리에 액세스 할 수 없습니다.

컨테이너 대신 로컬 컴퓨터에서 실행할 때 완벽하게 작동합니다.

+0

내가 몇 가지를 알아 냈 :

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

는 CPU 사용량을 보여 않습니다. 이 코드로 모든 실적 카테고리를 나열하려고 시도했을 때 PerformanceCounterCategory [] categories = PerformanceCounterCategory.GetCategories(); foreach (범주의 PerformanceCounterCategory 범주) { Console.WriteLine ("범주 이름 : {0}", category.CategoryName); } 프로세서라는 카테고리가 없습니다. Windows Server 2016에이 기능이없는 이유는 무엇입니까? – ashok

답변

0

나는 이것이 작동해야한다는 것을 알고 있습니다.

TypePerf를 사용하여 해당 카운터를 쿼리 해 볼 수 있습니까? Windows Server 핵심 기본 이미지에서 쿼리 할 때 내 시스템에서이를 볼 수 있습니다. 그들이 만든 컨테이너에 침입 했습니까? 그것은 실제로 카테고리 프로세서가 어떤 이유로 내 OS에 존재하지 않는 것을 의미한다 1 : "(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"