Устранение неполадок в Redis

Redis – это открытое in-memory хранилище данных типа «ключ-значение». Оно поставляется с несколькими командами для устранения неполадок и багов.

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

Как работать с этим мануалом

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

Команды, использованные в этом мануале, были протестированы на сервере Ubuntu 18.04 и экземпляре Redis версии 4.0.9. Чтобы настроить аналогичную среду, вы можете следовать разделу 1 руководства Установка и защита Redis в Ubuntu 18.04. Мы покажем, как эти ведут себя команды в redis-cli, интерфейсе командной строки Redis. Обратите внимание, что если вы используете другой интерфейс Redis — например, Redli – то вывод некоторых команд будет отличаться.

Устранение ошибок, связанных с памятью

Команда memory usage говорит, сколько памяти в настоящее время используется одним ключом. Она принимает имя ключа в качестве аргумента и выводит количество байтов, которые он использует:

memory usage key_meaningOfLife
(integer) 42

Для более общей картины использования памяти сервером Redis вы можете выполнить команду memory stats:

memory stats

Эта команда выводит массив связанных с памятью метрик и их значений. Ниже приведены показатели, которые выводит команда memory stats:

  • peak.allocated: максимальное количество байтов, потребляемых Redis.
  • total.allocated: общее количество байтов, выделенных Redis.
  • startup.allocated: начальное количество байтов, использованных Redis при запуске.
  • replication.backlog: размер лога репликации в байтах.
  • client.slaves: общий размер всех издержек реплики (буферы вывода и запросов и контексты соединения).
  • clients.normal: общий размер всех накладных расходов клиента.
  • aof.buffer: общий размер текущих и перезаписываемых буферов только для записи.
  • db.0: издержки словарей main и expiry для каждой базы данных, используемой на сервере, в байтах.
  • overhead.total: сумма всех издержек, используемых для управления пространством ключей Redis.
  • keys.count: общее количество ключей во всех базах данных на сервере.
  • keys.bytes-per-key: соотношение использования памяти сервера и количества ключей из keys.count.
  • dataset.bytes: размер набора данных в байтах
  • dataset.percentage: процент использования чистой памяти Redis, занятый dataset.bytes.
  • peak.percentage: процент значения peak.allocated в общем объеме total.allocated.
  • fragmentation: отношение объема используемой в данный момент памяти к физической памяти, используемой Redis.

Команда memory malloc-stats предоставляет внутренний статистический отчет от jemalloc, распределителя памяти Redis в системах Linux:

memory malloc-stats

Если кажется, что ваши проблемы связаны с памятью, но анализ выходных данных предыдущих команд ничего полезного не говорит, вы можете попробовать запустить команду memory doctor:

memory doctor

Эта функция выводит все проблемы, связанные с использованием памяти, которые она может найти, и предлагает возможные решения.

Сбор общей информации об экземпляре Redis

Команда monitor – это команда отладки, которая не связана напрямую с управлением памятью. Она позволяет посмотреть на постоянный поток каждой команды, обрабатываемой сервером Redis:

monitor
OK
1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared"
1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

Еще одна полезная для отладки команда — это info, она возвращает несколько блоков информации и статистики о сервере:

info
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9435c3c2879311f3
redis_mode:standalone
os:Linux 4.15.0-52-generic x86_64
. . .

Эта команда возвращает много данных. Если вы хотите увидеть только один конкретный блок, вы можете указать его в качестве аргумента команды info:

info CPU
# CPU
used_cpu_sys:173.16
used_cpu_user:70.89
used_cpu_sys_children:0.01
used_cpu_user_children:0.04

Обратите внимание: вывод команды info будет зависеть от того, какую версию Redis вы используете.

Использование команд keys

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

keys pattern

Команда поддерживает следующие глобальные переменные:

  • ? – подстановочный знак для одного символа. Например, шаблон s?mmy соответствует ключам sammy, sommy и sqmmy.
  • — это подстановочный знак для любого количества символов (включая 0 символов). Например, шаблон sa*y совпадет с ключами sammy, say, sammmmmmy и salmony.
  • Вы можете указать два или более символов, которые может включать шаблон, в квадратных скобках. То есть, шаблон s[ai]mmy совпадет с результатами sammy и simmy, но не с summy.
  • Чтобы игнорировать одну или несколько букв, заключите их в квадратные скобки и поставьте перед ними символ ^. Например, шаблон s[^oi]mmy совпадет с ключом sammy или sxmmy, но не с sommy или simmy.
  • Чтобы задать диапазон букв, укажите первую и последнюю букву диапазона и возьмите их в квадратные скобки. Шаблон s[a-o]mmy соответствует ключам sammy, skmmy или sommy, но не соответствует ключу srmmy

Важно! Документация Redis рекомендует использовать команду keys в производственной среде только в исключительных случаях, так как она может оказать существенное негативное влияние на производительность.

Заключение

В этом мануале мы подробно описали ряд команд для устранения неполадок и проблем, с которыми можно столкнуться при работе с Redis. Читайте другие мануалы по Redis в нашем Информатории.

Tags: , , ,