У меня есть настоящий головной убор из-за утечки памяти при работе в Azure-app-service-webjob.
Это фоновый рабочий процесс, считывающий работу из очереди и по расписанию.Примерно каждые 10 минут происходит увеличение использования памяти, прежде чем (примерно через 10 минут) вернуться к нормальному базовому уровню.Каждый шип немного выше каждый раз.До тех пор, пока, в конце концов, шип не достигнет достаточно высокого уровня (скажем,> 80%), после чего потребуется все больше и больше времени, чтобы вернуться к базовому уровню, и, наконец, он блокируется.Нет большого или большого количества запросов к базе данных, и ни одна из операций обработки не занимает больше нескольких секунд.Трудно получить очень четкий след, поскольку в 10-минутном цикле может быть 15-30 различных операций.
В любом случае.Некоторое время назад, когда он находился в фазе «максимума», я получил полный дамп памяти и подключил его к WinDbg.В памяти были миллионы сущностей Entity Framework (6) определенного типа, несмотря на то, что в базе данных было всего несколько тысяч.
Я не смог воспроизвести локально.Поэтому я добавил некоторый код в конструктор этого типа сущности - он хранит Dictionary<string,long>
количества раз, которое определенный Environment.StackTrace
виден из конструктора.Я жду, когда произойдет "максимизация", но при удаленном подключении на данный момент это выглядит довольно стандартно / нормально.
Учитывая, что эти объекты / могут / увеличиваться со временем, это необъясните растущие пики и вернитесь к исходному уровню.Так ли это?
Я также только что записал полный дамп памяти во время «базового уровня», а затем «небольшого всплеска» (всего несколько часов, как показано на рисунке).У меня есть элементарные навыки WinDbg.
В любом случае, мои вопросы / причины путаницы:
- Как определить разницу между двумя полными дампами памяти?
- Кто-нибудь видел что-то подобное раньше?
- Что может вызывать скачки памяти в каждом случае?
- Если это утечка памяти, почему она вообще возвращается к базовой линии между скачками?
IХотелось бы думать, что никакой магии не происходит, но я просто не могу найти вещь, которая совпадает со всплеском:
- Количество записей в базе данных постепенно увеличивается, но составляет всего несколько тысяч,и проблема с памятью сбрасывается, если процесс перезапускается
- Кажется, что ни одна операция не занимает более нескольких секунд, в соответствии с журналированием, несмотря на пики, продолжающиеся ~ 10 минут