Устранение неполадок в Redis
Linux, Ubuntu | Комментировать запись
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: NoSQL, Redis, Ubuntu, Ubuntu 18.04