2008-11-14 4 views
37

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

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

ответ

20

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

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

+0

Спасибо. Можете ли вы случайно указать мне на некоторые цифры? Мне любопытно, насколько они хороши ... – Boaz 2008-11-14 17:46:24

1

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

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

2

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

7

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

27

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

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

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

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

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

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

8

Я проверил их много.

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

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

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

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

  • Нет связанных вопросов^_^