Как отследить отдельные проблемы с производительностью ASP.NET в производственной среде? - PullRequest
1 голос
/ 04 апреля 2010

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

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

Существует ли система ведения журналов .NET, которая позволяет мне выполнять вызовы с помощью кода, одновременно отслеживая производительность? Что бы вы порекомендовали?

Ответы [ 7 ]

2 голосов
/ 04 апреля 2010

Оказалось, что каждая периодически возникающая проблема с производительностью была вызвана чем-то в базе данных.

Вам нужно проверить мой пост в блоге Необъяснимый-SQL-Server-Time-and-Intermittent-Blocking . Нет, это не вызвано интенсивным процессом INSERT или UPDATE, как вы ожидаете.

Я бы запускал трассировку базы данных в течение 1/2 дня. Да, трассировка должна производиться на производстве, потому что проблема обычно не возникает в среде с низким уровнем использования.

В ваших строках журнала трассировки будет столбец «Продолжительность», показывающий, сколько времени заняло событие. Вы смотрите на тех, кто работает долго, и тех, кто перед ними, которые могут удерживать тех, кто работает долго. Как только вы найдете шаблон, вам нужно выяснить, как все работает.

1 голос
/ 05 апреля 2010

IIS 7.0 имеет встроенную возможность трассировки ETW. ETW - самая быстрая и наименее затратная регистрация. Он встроен в ядро. Что касается IIS, он может регистрировать каждый вызов. Лучшая часть ETW: вы можете включить все в систему и получить целостное представление о приложении и сервере. Например, вы можете включить реестр, файловую систему, переключение контекста и получать стеки вызовов вместе с продолжительностью.

Вот основной обзор ETW и специфический для IIS , и у меня также есть несколько сообщений на ETW

0 голосов
/ 15 июня 2017

Из моего опыта проблемы производительности почти всегда связаны с вводом-выводом и редко связаны с процессором.

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

Еще один быстрый способ понять, где могут возникнуть проблемы, - это запустить небольшой нагрузочный тест локально на вашей машине, пока к процессу подключен профилировщик кода (наподобие встроенного в VS), чтобы постоянно указывать, где вы находитесь. собирается Я обычно нахожу несколько «быстрых побед» с таким подходом.

0 голосов
/ 12 апреля 2010

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

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

0 голосов
/ 04 апреля 2010

Вы не предоставляете подробности того, что делает ваше приложение с точки зрения ресурсов (базы данных, сети, файлов), которые оно использует. В дополнение к шагам с других постеров, я бы посмотрел на все, что происходит в «вне процесса», например:

  • Базы данных подключений
  • Открытые файлы
  • Доступ к сетевым ресурсам

... в основном все, что не происходит в процессе ASP.NET.

0 голосов
/ 04 апреля 2010

Я бы начал со следующего списка предметов:

  • Включите ASP.Net Health Monitoring, чтобы начать получать некоторые показатели и цифры.
  • Проверьте использование памяти на сервере. Устраняет ли периодическая переустановка IIS эту проблему (утечка памяти ??).
  • ELMAH - хороший инструмент для начала изучения исключений. Кроме того, просмотрите журналы, которые может генерировать ваше приложение.
  • Затем я бы искал антивирусное программное обеспечение, работающее в определенное время, или какие-то долго работающие процессы, которые могут замедлять работу компьютера и т. Д., Расписание резервного копирования базы данных ...

НТН.

0 голосов
/ 04 апреля 2010

Я бы начал с мониторинга ASP.NET производительности, связанной счетчиков. Вы даже можете добавить свои собственные счетчики в свое приложение, если хотите. Также обратите внимание на количество процессов w3wp.exe, работающих во время замедления по сравнению с нормальным. Посмотрите на их использование памяти. Звучит для меня как утечка памяти, которая в итоге приводит к завершению рабочего процесса, что, конечно, временно устраняет проблему.

...