13

Я пытаюсь создать load test для некоторых приложений. И я хочу получить использование памяти только для моего приложения. Для этого я добавил Process/Working Set к моему счетчику установитьТест нагрузки не показывает более 4 ГБ для рабочего набора PerformanceCounter

enter image description here

Проблема заключается в Working SetPerformanceCounter считывать значения в байтах, а не рассчитывать значения более 4294967296 что составляет до 4 Гб

enter image description here

Но мое приложение «работает в 64-разрядном режиме» использует более 4 ГБ памяти
Это понятно из TaskManager я вижу, что он занимает около 6 ГБ, но это значение не отображается в нагрузочном тестовом графике.

Так как создавать настраиваемые PerformanceCounter действовать точно как Process/Working Set один, а с помощью килобайт вместо байтов я могу получить реальные значения. Или любое другое решение, которое позволяет мне рассчитать , насколько мое приложение использует память в тесте нагрузки.

+0

Почему бы просто не вывести выходной сигнал нормального и делить на '2 << 10' –

+0

Я не читаю значение программно. Я просто использую счетчики в нагрузочном тесте –

+0

Вы можете создавать свои собственные счетчики, которые поставляют именно то значение, которое вы хотите. У Microsoft есть страницы о том, как создавать пользовательские счетчики производительности. – AdrianHHH

ответ

4

Я нашел решение. Спасибо за все ваши комментарии, все они были очень полезны.

Первый шаг нормальная установка нового PerformanceCounterCategory только самое главное, чтобы установить его в качестве PerformanceCounterCategoryType.MultiInstance например

var countersToCreate = new CounterCreationDataCollection(); 
var memoryCounterData = new CounterCreationData("Memory Usage", "Memory Usage", PerformanceCounterType.NumberOfItems64); 
countersToCreate.Add(memoryCounterData); 
PerformanceCounterCategory.Create("KB Memory Usage", "KB Memory Usage", PerformanceCounterCategoryType.MultiInstance, countersToCreate); 

Следующий шаг должен иметь простые окна обслуживания или консольное приложение, которое должно считывать значения для каждого процесса из process.WorkingSet64 и установить их на свой PerformanceCounter. Это приложение или служба должны запускаться во время выполнения вашего теста нагрузки и, конечно, в режиме x64. , например.

static void Main(string[] args) 
{ 
    while (true) 
    { 
     Thread.Sleep(500); 
     foreach (var process in Process.GetProcesses()) 
     { 
      var memoryUsage = new PerformanceCounter("KB Memory Usage", "Memory Usage", process.ProcessName, false); 
      memoryUsage.RawValue = process.WorkingSet64/1024; 
     } 
    } 
} 
0

Согласно документации PerformanceCounter.RawValue Property:

Если тип счетчика является 32-битный размер, и вы пытаетесь установить это свойство в значение, которое является слишком большим, чтобы соответствовать, свойство обрезает значение до 32 бит.

Таким образом, вы должны использовать правильные PerformanceCounterType (они с суффиксом 64).

+5

Голосование без комментариев никому не помогло. Дорогой путник, пожалуйста, будьте добры и объясните мне, что вам не нравится в моем намеке. Благодарю. –

Смежные вопросы