Как я могу профилировать приложение ASP.NET, работающее на рабочем сервере? - PullRequest
7 голосов
/ 20 октября 2010

У меня есть приложение ASP.NET, которое последовательно использует 75% - 100% ЦП на рабочем сервере. Как я могу профилировать приложение, чтобы выяснить, какая часть кода использует больше всего процессора? Я рассмотрел несколько различных инструментов (Xte Profiler, EQATEC, dotTrace), но все они, похоже, хотят, чтобы вы загрузили и запустили приложение в их инструменте. Мне кажется, что они хотят, чтобы вы загрузили приложение в их инструмент и запускали тесты локально (не в производстве). Я хочу профилировать приложение, пока оно запущено в производство, и люди будут его запускать, чтобы посмотреть, что на самом деле происходит. Возможно ли это?

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

Спасибо, Corey

Ответы [ 7 ]

7 голосов
/ 30 мая 2015

Сэм Саффрон (один из создателей StackoverFlow) некоторое время назад написал отличный инструмент командной строки, но, к сожалению, отказался от него.

https://github.com/jitbit/cpu-analyzer

(на странице есть ссылка на сообщение Сэма, объясняющее, как его использовать)

Отличная вещь об этом инструменте (помимо "не требуется установка")переносимость, интерфейс cmd-line и т. д.) заключается в том, что пакеты APM, такие как NewRelic и т. д., отслеживают только http-запросы.Если в вашем приложении есть некоторые фоновые потоки - они не сильно помогут.

2 голосов
/ 20 октября 2010

Вы должны рассмотреть возможность создания дампа памяти на рабочем сервере, когда он испытывает высокую загрузку ЦП.Проверьте ADPlus и выполните дамп зависания в процессе asp.net.Затем это можно проанализировать с помощью Windbg или других инструментов.

Я только что прошел аналогичный опыт, когда наши производственные серверы испытывали чрезмерную загрузку ЦП - сценарий, который мы не могли воссоздать локально или в тестовом режиме/ постановочная среда.Это не имело ничего общего с базой данных (процессор базы данных был в норме).Анализ файла дампа - это то, что подсказало нам причину проблемы (чрезмерная компиляция объектов регулярных выражений в какой-то библиотеке, которую мы использовали).

Этот ответ был бы неполным без блога Тесс так вот ссылка.

1 голос
/ 20 октября 2010

Полагаю, это связано с длительными запросами к базе данных, а не с самим приложением ASP.net. По моему опыту, 9 раз из 10 это то, что я вижу, и это приводит к тому, что сервер APPLICATION выполняет обход контента по мере расходования ресурсов, и приложение должно ждать завершения каждого запроса для продолжения. Взгляните на SQL profilier на сервере БД и посмотрите, есть ли какие-либо запросы, выполнение которых занимает много времени.

Это может быть так же просто, как добавить индекс к столбцу или некоторые другие небольшие незначительные оптимизации. Как только вы узнаете запрос, вы также можете вернуться к своему коду и настроить этот раздел.

0 голосов
/ 05 мая 2017

Вы можете прочитать об этом в Microsoft Developer Network.Вы можете выбрать документацию в соответствии с версией вашей Visual Studio.Вы должны убедиться, что для вашего типа Visual Studio предусмотрена функция профилирования.

Как: профилировать веб-сайт или веб-приложение с помощью мастера производительности

0 голосов
/ 17 января 2017

Для тех, кто все еще сталкивается с этим вопросом, все зависит от того, чего вы пытаетесь достичь.

Если сервер работает с такой высокой нагрузкой на ЦП, шансы есть, стандартный профилировщик остановит его из-за дополнительных накладных расходов.

На самом деле существует три разных типа профилировщиков. Стандартные профилировщики, облегченные профилировщики транзакций и инструменты APM. Вы можете прочитать больше об этом в моем блоге, который обсуждает все 3:

.NET Profilers: 3 типа и зачем вам все они нужны

0 голосов
/ 21 октября 2010

Определенно возможно профилировать ASP.NET с помощью EQATEC Profiler.Увидеть: Профилирование веб-сайтов ASP.NET с помощью EQATEC Profiler

EQATEC Profiler обрабатывает ваше приложение на отдельном этапе, который позволяет самому приложению собирать свою собственную информацию профилирования, а затем профилировщик просто отображает эти временные данныевпоследствии.

Это означает, что вы можете запустить свое инструментальное приложение ASP.NET полностью независимо от самого профилировщика.Например, вы можете настроить свое приложение, отправить его по почте на ваш тестовый сайт в Индии, попросить их запустить его на своем сервере в течение нескольких дней, где он будет самостоятельно генерировать отчеты о сроках, и попросить их отослать вам эти отчеты обратно, что вы можетезатем посмотреть в профилировщике.Довольно аккуратно.

Примечание. Чтобы профилированное приложение генерировало моментальные снимки времени "само по себе", оно должно знать, когда их создавать.По умолчанию это когда метод Application_End вызывается в приложении ASP.NET.Вы можете программно создавать снимки, когда вам это удобно, с помощью EQATEC Profiler API.См. Руководство пользователя или ознакомьтесь с этой темой .

0 голосов
/ 20 октября 2010

Лучше всего профилировать свой код на своем компьютере, чтобы определить, где он проводит время.

Получите 10-дневную бесплатную пробную версию:

http://www.jetbrains.com/profiler/

Вот несколько ссылок, которые помогут вам начать:

http://blogs.msdn.com/b/alikl/archive/2009/03/06/why-my-asp-net-application-s-performance-is-less-than-optimal.aspx

http://msdn.microsoft.com/en-us/library/ms178643(v=VS.100).aspx

http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...