Попытка диагностировать утечку памяти в приложении Azure ASP.NET Core WebAPI - PullRequest
2 голосов
/ 02 мая 2019

Я преследую эту утечку памяти уже около месяца и не могу понять.Приложение работает в Azure с использованием .NETCore 2.2 и представляет собой простой WebAPI.В нашей среде разработки я решил написать приложение, которое отправляло бы тысячи запросов конечной точке целевого приложения.В общей сложности я отправил 1 000 000 запросов за 12 часов до 2:30.Вот как выглядела статистика памяти:

Рабочий набор: working set

Private Bytes: private bytes

Статистика примерно за 6 часов программы завершилась: process stats

Итак, приватные байты остались там, где они были, и похоже, что это вся выгружаемая память, рабочий набор мгновенно упалкак только программа остановилась.Я решил сбросить память, пока приватные байты сидят там, где они есть, и статистика выглядит абсолютно нормальной.Размер дампа составил более 1,4 ГБ!Но то, что он показал, было не в восторге:

enter image description here

Показывает только 10 МБ памяти, используемой объектами.Где выделяется вся эта память?

Одна вещь, которая интересна, - если я отпущу это, в конце концов оно будет зависать некоторое время, а затем аварийно завершать работу («Приложение CGI обнаружило ошибку ...»).Количество дескрипторов внезапно увеличится до 10000, затем зависнет (время запроса 2 минуты, запрос на отмену), затем произойдет сбой и остановится навсегда, пока человек не перезапустит его.быть.Я в полной растерянности относительно того, что вызывает это наращивание памяти.PerfView, dotMemory, Visual Studio не показывает ничего плохого в управляемой памяти.Я запускаю diff в начале и в конце, и ничего странного.В некотором роде отчаяние в этот момент.

...