Мы заметили, что в наших веб-ролях потребление памяти процессом Azure «CacheService» для Windows растет линейно. Что может быть причиной этого?
Утечка памяти, верно? Ну нет, потому что мы даже не используем его. Кэширование Azure в роли было оставлено включенным только из-за недосмотра предыдущей функции, которая была удалена. Теперь мы отключили его и сделали это без внесения каких-либо изменений в наше приложение, что должно доказать, что мы на самом деле его не использовали, и поэтому сценарий утечки памяти невозможен.
Как и ожидалось, процесс Windows даже не запускается теперь, когда кэширование в роли отключено, и у нас больше нет проблемы. Тем не менее, мы все равно хотели бы знать, что происходит на случай, если нам понадобится использовать его снова. Вот еще некоторые подробности:
- Рост был почти линейным как в краткосрочной, так и в долгосрочной перспективе.
- Скорость роста была около 200мб/день
- После развертывания он начал использовать около 600 МБ памяти.
- Использование памяти увеличится примерно до 4,2 ГБ, что составляет более 50% от общего объема ОЗУ, даже если размер кэша был установлен на максимальное значение 30%. На данный момент это вызвало проблемы.
- Использование сайта не является линейным. Бывают случаи, когда нет пользователей, а иногда есть сотни одновременных пользователей.
Возможно, включение кэширования в роли позволяет веб-приложению использовать его для какого-то встроенного кэширования. Например, пакеты MVC кэшируются в HttpRuntime.Cache, так что может быть что-то подобное происходит? Я не знаю ни одного такого механизма, и даже если бы он был, почему использование памяти росло бы таким линейным образом и продолжало бы расти?
Мы могли бы снова включить его и написать веб-страницу/обработчик для перечисления всех элементов в кэше Azure и посмотреть, прольет ли это свет на проблему.