Понимание App Insights от начала до конца для единичного долгого времени отклика - PullRequest
0 голосов
/ 21 ноября 2018

Справочная информация. У меня есть базовое приложение ASP.NET, и у меня есть метод API, который принимает имя файла BLOB-объекта, загруженного веб-интерфейсом в BLOB-объект Azure.Затем необходимо создать миниатюрную версию большого двоичного объекта и вернуть имя недавно загруженного миниатюрного большого двоичного объекта.Иногда при одинаковом размере файла может потребоваться до 40 секунд.В основном это около 400 мс.

Ниже приведен конец в конец App Insights, у меня есть несколько вещей, которые я не понимаю:

1) Продолжительность запроса составляет 37,5 с, но все жедругие операции складываются в небытие в это время

2) Зачем нужны вызовы на master db?Мы используем EF6 с несколькими контекстами

3) Приложение использует службу приложений Azure и SQL Azure.Я не понимаю, почему время отклика такое противоречивое.

Любая помощь будет высоко ценится!enter image description here

Ответы [ 2 ]

0 голосов
/ 20 января 2019

1.

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

Зависимость - это еще один вызов, который отправляет информацию о времени выполнения приложения.В вашем примере каждый вызов базы данных автоматически отслеживается как зависимость.Код, выполняемый после каждого вызова базы данных, не является тем не менее.

Так, например, запрос записи базы данных, которая занимает 200 мс, а затем выдача Thread.Sleep в течение 2 секунд и запрос другой записи базы данных, которая занимает 300 мс, приведет к 2 секундам.разрыв между двумя зависимостями вызова базы данных, каждая из которых будет указана соответственно с 200/300 мс.

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

2.

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

3.

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

0 голосов
/ 21 ноября 2018

Я неоднократно замечал, что первый запрос после развертывания приложения на Azure или после длительного периода, когда к приложению не было обращено ни одного запроса, получение ответа занимает значительно больше времени.Насколько я помню, это было связано со временем запуска сайта (если вы используете Служба приложений на Windows на основе VM , это все ещеиспользует IIS в качестве обратного прокси-сервера).

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

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

Надеюсь, это поможет!

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