Вопрос по .net, windows, c# – Счетчики производительности Windows исчезают из PerfMon

2

Я полностью сбит с толку (TM) этим: на Win7SP1, 64-битной машине,PerfMon кажется, полностью дезавуирует знание установленных, пользовательских счетчиков производительности. Я работаю с существующей базой кода, которая прекрасно устанавливает счетчики на производственных машинах, но когда я запускаю ее на своем компьютере, когда я запускаю ее с добавленными счетчиками, или если я запускаю полностью надуманную сборку ( мясо которого наклеено ниже), я получаю странное поведение.

Это, вероятно, проще всего описать с помощью следующего фрагмента кода:

var category = "SuperTest";
var counterName = "Test Counter 1";
var shouldInstall = true;

if (PerformanceCounterCategory.Exists(category))
{
    shouldInstall = false;
    Console.WriteLine("{0} Category Exists. Overwrite? [n]", category);
    var input = Console.ReadLine();
    if (bool.TryParse(input, out shouldInstall))
    {
        PerformanceCounterCategory.Delete(category);
    }
}
if (shouldInstall)
{
    var col = new CounterCreationDataCollection();
    col.Add(new CounterCreationData()
    {
        CounterName = counterName,
        CounterType = PerformanceCounterType.NumberOfItems64
    });

    PerformanceCounterCategory.Create(category, "Test category.", PerformanceCounterCategoryType.SingleInstance, col);
    // Magical voodoo line that may indicate my inexperience, but whose inclusion or
    // exclusion does not affect discernibly affect behavior.
    PerformanceCounter.CloseSharedResources();
}

// Multithreading setup, each thread repeats block below infinitely:
{
    System.Threading.Thread.Sleep((new Random()).Next(100));
    try
    {
        var counter = new PerformanceCounter(category, counterName, false));
        c.Increment();
    }
    catch (Exception ex) { /* ... */ }
}

При первом запуске категория не существует, и она продолжает создавать категорию и счетчик. Я убиваю процесс, затем открываюPerfMon, На данный момент я могуAdd Counter, посмотрите категорию и счетчик, добавьте это прекрасно и смотрите0.000, Отлично. На данный момент, если я закроюPerfMon и открыть это? Я могу видеть все системные счетчики производительности просто отлично, но все мои собственные - как уже упоминалось, те, которые работают в продуктах, те, которые я создал на их основе,and надуманные - просто ушли.

Интересно то, что если я запусту приведенный выше код, он будет постоянно сообщать мне, что группа существует. Погружаясь глубже, счетчик даже существует. Это кажется странным для меня. Оставить его все еще в исчезнувшем состоянии и взять сигнал отВот, Я могу бежать:lodctr /R, И ониdo Вернись.

Похоже, что я как-то испортил свой собственный магазин счетчиков производительности. Мой вопрос состоит из двух частей:

Is this what I'm doing (corrupting the performance counter store)? Since it's reproducible, is there anything that stands out in the code or my process that I'm doing to create this behavior?

На мой взгляд, это несколько отличается от других "исчезнувших счетчиков производительности". вопрос, потому что они существуют, и я наблюдаю, как они исчезают.

Ваш Ответ

2   ответа
2

что проблема заключается в компьютере и / или в его конфигурации, а не в коде, который вы опубликовали. Я столкнулся с той же ситуацией и не смог понять, почему счетчики исчезают при открытии монитора производительности. Тем не менее, я могу помочь вам с этим:

Perfmon will sometimes disable performance counters by flagging it as disabled in the registry. The link might help you find why the counters are being disabled.

Monitoring counters can also be done with the tool typeperf. In my experience, typeperf has not disabled the same counters perfmon will, providing you with an alternative in monitoring your counters.

Error: User Rate Limit ExceededHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ServicesError: User Rate Limit ExceededDisable Performance CountersError: User Rate Limit ExceededPerformanceError: User Rate Limit Exceeded
1

То есть если ваши счетчики производительности были созданы с использованием процесса x64, убедитесь, что вы также читаете их с использованием процесса x64.

Кроме того, попробуйте запустить от имени администратора.

Похожие вопросы