Устранение неполадок с Кэшем Azure для Redis на стороне сервера

В этом разделе обсуждается устранение проблем, возникающих из-за состояния Кэша Azure для Redis или виртуальных машин, на которых он размещается.

Примечание

Шаги по устранению проблем в этой статье также включают в себя указания по выполнению команд Redis и мониторингу различных метрик производительности. Дополнительные сведения и указания см. в разделе Дополнительные сведения.

Нехватка памяти на сервере Redis

Нехватка памяти на сервере кэширования служит причиной всевозможных проблем с производительностью, которые вызывают задержку обработки запросов. При нехватке памяти система начинает сбрасывать страницы данных на диск. Именно ошибки страниц существенно замедляют работу системы. Нехватка памяти может возникнуть по следующим причинам.

  • Кэш заполнен данными практически полностью.
  • В Redis наблюдается большая фрагментация памяти. Эта фрагментация чаще всего связана с хранением больших объектов, так как служба Redis оптимизирована для небольших объектов.

Если выполнить команду INFO, которая помогает определить эту проблему, Redis предоставит два статистических показателя: "used_memory" и "used_memory_rss". Эти метрики можно просмотреть на портале.

Настроить оптимальное использование памяти можно несколькими способами.

  • Настройте политику памяти и параметры времени завершения срока действия ключей. Этой политики может быть недостаточно, если используется фрагментация.
  • Настройте значение maxmemory-reserved , которого будет достаточно, чтобы компенсировать фрагментацию памяти.
  • Разбейте большие кэшированные объекты на меньшие связанные объекты.
  • Создайте оповещения на таких метриках, как объем используемой памяти, чтобы заранее получать уведомления о возможных влияниях.
  • Используйте масштабирование, чтобы увеличить размер кэша и объем памяти.

Высокая загрузка ЦП или сервера

Высокая нагрузка на сервер или использование ЦП означает, что сервер не может своевременно обрабатывать запросы. Сервер медленно реагирует и не может обеспечивать нужную частоту запросов.

Отслеживайте метрики, такие как загрузка ЦП или сервера. Понаблюдайте за пиками загрузки ЦП, которые соответствуют времени ожидания.

Существует несколько изменений, которые позволяют снизить высокую нагрузку на сервер:

Долго выполняющиеся команды

Некоторым командам Redis для выполнения требуется больше ресурсов, чем остальным. В документации по командам Redis показана временная сложность каждой команды. Поскольку команды Redis обрабатываются в одном потоке, команда, на выполнение которой нужно время, препятствует выполнению всех последующих команд. Вы должны изучить команды, которые отдаете серверу Redis, чтобы понять, как они влияют на производительность. Например, команду KEYS часто используют, не зная, что это операция с линейной сложностью (O(N)). Вместо KEYS можно использовать SCAN, чтобы уменьшить пики загрузки ЦП.

Команда SLOWLOG позволяет измерять показатели ресурсоемких команд, выполняемых на сервере.

Ограничение пропускной способности на стороне сервера

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

Метрики "Чтение из кэша" и "Запись в кэш" позволяют узнать, как потребляется пропускная способность на стороне сервера. Эти метрики можно просмотреть на портале.

Чтобы устранить ситуации, когда пропускная способность сети используется практически по максимуму:

  • Измените режим вызова клиента, чтобы уменьшить потребность в сети.
  • Создавайте оповещения для таких метрик, как "чтение кэша" или "запись в кэш", чтобы заранее получать уведомления о возможных влияниях.
  • Используйте масштабирование, чтобы увеличить размер кэша и пропускную способность сети.

Дополнительные сведения