Какие тулы для профилирования ASP.NET Core приложений в докере можете посоветовать?
Всем привет! Появилась необходимость изучить производительность отдельных эндпоинтов в ASP.NET Core Web API, работающего в докер-контейнере. Необходимо изучить какие методы жрут больше всего CPU/RAM и какие методы больше всего выполняются. Докер-конейнер находится в кубернетесе на удалённой машине.
Сейчас рассматриваю следующие варианты:
1) dotTrace. Пробовал запускать через dotTrace.sh внутри контейнера и читать снепшот через Rider. Не очень информативный получился снепшот (хотя может быть я просто я открывал его как-то не так :))
2) dotnet-trace.
3) Visual Studio Performance Profiler - пока что не разобрался как можно подключиться к remote process в докере в VS Community 2019.
Можете подсказать на какую тулу стоит потратить больше времени для изучения? Какая из них даст ту статистику, которая мне необходима?
Прикольная штука, очень простая в использовании и установке. Единственное только не разобрался как выдать больше информации по вызываемым методам, у меня есть метод сервиса контроллера ValidateUserByEmailAndPasswordAsync, внутри которого вызывается кучу хелперов (например для хеширования пароля), но почему-то MiniProfiler показывает только поверхностные данные. Можно ли его как-то настроить, чтобы он отображал все вызываемые методы?
Докер-конейнер находится в кубернетесе на удалённой машине.
Это всё осложняет. Обычно, на продакшене профилировать не стоит - лучше написать нагрузочные тесты и запускать в разработческом окружении
Как вариант для dotnet-trace
Базовый образ в докере должен быть SDK 3.0+
Устанавливаем dotnet-trace в докере
RUN dotnet tool install --global dotnet-trace
ENV PATH $PATH:/root/.dotnet/tools
После запуска приложения в контейнере (писать в консоль в докере):
Спасибо, попробовал снять метрики через dotnet-trace, файлик выкачал и открыл в Visual Studio. Попробовал подудосить свой микросервис в течении 30 секунд, получил список каких-то непонятных функций (которые по всей видимости запускаются на уровне ASP.NET Core фреймворка), каких-то конкретных функий контроллера или сервиса я не нашёл. Это так и должно быть или я что-то делаю не так?