Какое влияние на производительность счетчиков производительности

Рассматривая использование счетчиков производительности в качестве сайта, основанного на .NET на моей компании, мне было интересно, насколько большие издержки связаны с их использованием.

Я хочу, чтобы мой сайт постоянно обновлял счетчики, или мне лучше делать это только при измерении?

Ответ 1

Эффективность производительности незначительна при обновлении. Microsoft намерена, что вы всегда пишете счетчики производительности. Это мониторинг (или захват) тех счетчиков производительности, которые могут привести к ухудшению производительности. Итак, только когда вы используете что-то вроде perfmon для захвата данных.

По сути, объекты счетчика производительности будут иметь эффект только "делать это, когда вы измеряете".

Ответ 2

Накладные расходы на настройку счетчиков производительности обычно недостаточно высоки, чтобы беспокоиться (настройка области разделяемой памяти и некоторых объектов .NET вместе с издержками CLR, поскольку CLR на самом деле делает управление для вас). Здесь я имею в виду классы, такие как PerformanceCounter.

Накладные расходы на регистрацию счетчиков производительности могут быть довольно медленными, но, как правило, это не вызывает беспокойства, поскольку он должен произойти один раз во время настройки, потому что вы хотите изменить состояние машины. Это будет затмевать любое копирование, которое вы делаете. Обычно это не то, что вы хотите делать во время выполнения. Здесь я имею в виду PerformanceCounterInstaller.

Накладные расходы на обновление счетчика производительности обычно сводятся к стоимости выполнения операции блокировки в общей памяти. Это медленнее, чем обычный доступ к памяти, но является примитивным процессором (как он получает атомарные операции во всей подсистеме памяти, включая кеши). Как правило, эта стоимость не стоит беспокоиться. Это может быть в 10 раз больше нормальной работы с памятью, что потенциально хуже в зависимости от обновления и того, что противоречит потокам и процессорам. Но учтите это, что буквально невозможно сделать лучше, чем блокированные операции для межпроцессного взаимодействия с атомными обновлениями, и блокировки не проводятся. Здесь я имею в виду PerformanceCounter.Increment и аналогичные методы.

Накладные расходы на чтение счетчика производительности обычно являются чтением из разделяемой памяти. Как говорили другие, вы хотите попробовать в разумный срок (как и любой другой выборки), но просто подумайте о PerfMon и попытайтесь сохранить выборку в человеческом масштабе (подумайте секунды вместо миллисекунд), и у вас не будет никаких проблемы.

Наконец, обращение к опыту: счетчики производительности настолько легки, что они используются повсеместно в Windows, от ядра до драйверов для пользовательских приложений. Microsoft полагается на них внутренне.

Совет. Реальный вопрос с счетчиками производительности - это кривая обучения в понимании (умеренная) и одно измерение правильных вещей (кажется легким, но часто вы ошибаетесь).

Ответ 3

Счетчик производительности - это всего лишь указатель на 4/8 байта в общей памяти (также известный как файл с отображением памяти), поэтому их стоимость очень похожа на стоимость доступа к int/long variabile.

Ответ 4

Я тестировал эти LOT.

На старой процессорной машине compaq 1Ghz 1 я смог создать около 10 000 счетчиков и дистанционно контролировать их для 20% использования ЦП. Это не пользовательские счетчики, просто проверка процессора или что-то еще.

В принципе, вы можете контролировать все счетчики на любой достойной более новой машине с очень небольшим воздействием.

Реализация объекта может занять много времени, от нескольких секунд до нескольких минут. Я предлагаю вам многопоточность для всех счетчиков, которые вы собираете, иначе ваше приложение будет сидеть там навсегда, создавая эти объекты. Не уверен, что MS делает, когда вы его создаете так долго, но вы можете сделать это для 1000 счетчиков с 1000 потоками, в то же время вы можете сделать это для 1 счетчика и 1 потока.

Ответ 5

Я согласен с knownhamsandwich, но добавлю, что до тех пор, пока ваша частота выборки будет разумной (5 секунд или более), и вы будете контролировать разумный набор счетчиков, то влияние измерения также незначительно (в большинстве случаев).

Ответ 6

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

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