Утечка памяти в модулях DNN 9 MVC - PullRequest
1 голос
/ 22 октября 2019

Мы получаем утечку памяти в службе приложений Azure, работающей с интерфейсным веб-сайтом DNN, содержащим преимущественно WebForm, но также и некоторые модули MVC.

Я выполнил дамп памяти через dotMemory и обнаружил, что наибольший из оставшихсяРазмер принимается типом объекта ViewEngineCollection.

Насколько я понимаю, он должен содержать механизм представления Razor, а также любые другие, используемые в веб-приложении.

Я обнаружил, что вместо этого каждый экземпляр каждого объекта MVC добавляется в коллекцию в качестве движков представления и никогда не собирается сборщиком мусора, что занимает гигабайты памяти. Во время дампа памяти> 90% были в памяти gen2, поэтому они долговечны.

Рассмотрим модуль MVC, MyMVCModule. Допустим, в .cshtml есть тег action, который содержит динамически генерируемый URL - кажется, что при создании экземпляра объекта MVC средство сравнения объектов определяет эквивалентность с другими объектами, уже находящимися в коллекции. Любая небольшая разница в версиях одного и того же модуля приведет к тому, что он будет добавлен в память как «новый» движок. Я считаю, что это функция кеширования, но существует так много перестановок, что затраты на хранение на порядок превышают затраты на восстановление наших объектов MVC. В памяти находятся тысячи копий модуля.

Словарьявляется потомком ModuleDelegatingViewEngine, который является специфичным для dnn компонентом, поэтому я не верю, что эта проблема связана с платформой MVC в целом.

partial screenshot of dotMemory output

Это обычное поведение? Если да, есть ли способ заставить сборщик мусора очистить эти страницы раньше? Спасибо за вашу помощь.

1 Ответ

1 голос
/ 23 октября 2019

Несколько ответов / заметок для вас. Не 100% ответ, но больше, чем комментарий.

  1. Это НЕ нормально и не должно быть ситуации
  2. Подобные элементы должны быть зарегистрированы в самом проекте https://www.github.com/dnnsoftware/dnn.platform где их можно отслеживать / управлять.
  3. Мы работаем над проблемой, особенно с модулями WebAPI, которые могут быть связаны: https://github.com/dnnsoftware/Dnn.Platform/issues/3186

Не могли бы вы подтвердить, какие конкретныеверсию 9.х вы используете? Любой шанс представить образец модуля?

...