Что может быть причиной линейного роста памяти процесса кэширования Azure в роли?

Мы заметили, что в наших веб-ролях потребление памяти процессом Azure «CacheService» для Windows растет линейно. Что может быть причиной этого?

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

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

  • Рост был почти линейным как в краткосрочной, так и в долгосрочной перспективе.
  • Скорость роста была около 200мб/день
  • После развертывания он начал использовать около 600 МБ памяти.
  • Использование памяти увеличится примерно до 4,2 ГБ, что составляет более 50% от общего объема ОЗУ, даже если размер кэша был установлен на максимальное значение 30%. На данный момент это вызвало проблемы.
  • Использование сайта не является линейным. Бывают случаи, когда нет пользователей, а иногда есть сотни одновременных пользователей.

Возможно, включение кэширования в роли позволяет веб-приложению использовать его для какого-то встроенного кэширования. Например, пакеты MVC кэшируются в HttpRuntime.Cache, так что может быть что-то подобное происходит? Я не знаю ни одного такого механизма, и даже если бы он был, почему использование памяти росло бы таким линейным образом и продолжало бы расти?

Мы могли бы снова включить его и написать веб-страницу/обработчик для перечисления всех элементов в кэше Azure и посмотреть, прольет ли это свет на проблему.


person Co7e    schedule 23.07.2014    source источник


Ответы (1)


У меня аналогичная проблема, и я нашел эту статью:

http://blogs.msdn.com/b/cie/archive/2014/01/10/in-role-cache-demystified.aspx

что объясняется следующим образом:

Иногда служба кеша может показывать использование памяти больше, чем настроено, и причиной снова может быть истечение срока действия, вытесненные объекты, чрезмерное использование регионов, тегов и уведомлений. Вы увеличите рабочий набор для кэш-сервиса. Не пугайтесь, если увидите это, потому что это может быть ситуация, когда сборщик мусора еще не сработал для освобождения памяти. Обычно после сбора Gen 2 из GC использование памяти должно снизиться до нормального.

Вы также можете включить RDP в одном из экземпляров и проверить счетчики производительности, предполагая, что вы правильно включили диагностический мониторинг. См. здесь: https://msdn.microsoft.com/en-us/library/azure/hh914135.aspx#AzureSDK24

person Asher    schedule 14.06.2015