Профилирование Redis Memory Use - PullRequest
38 голосов
/ 04 апреля 2011

Есть ли какой-нибудь инструмент, который я могу использовать, чтобы узнать, сколько памяти занимает Redis?

Ответы [ 7 ]

37 голосов
/ 04 апреля 2011

Попробуйте посмотреть на команду INFO . Я также рекомендую прочитать эту статью об использовании памяти Redis, где вы можете найти дополнительную информацию о том, сколько памяти занимает определенные структуры данных.

29 голосов
/ 02 апреля 2012

См. https://github.com/sripathikrishnan/redis-rdb-tools

Rdb Tools сообщает память, используемую каждой парой ключ = значение в базе данных.Он анализирует файл дампа redis и создает файл csv.Каждая строка в этом CSV-файле является ключом, а столбцы содержат память, используемую этим ключом.

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

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

6 голосов
/ 07 апреля 2011

Redis будет выводить использование памяти каждые 5 секунд, если для loglevel установлено значение verbose или debug.

Например, это вывод моей почти пустой базы данных:

[49523] 07 Apr 00:38:58 - DB 0: 2 keys (0 volatile) in 4 slots HT.
[49523] 07 Apr 00:38:58 - 1 clients connected (0 slaves), 924416 bytes in use

Вы можете видеть, что в базе данных есть 2 ключа и 1 подключенный клиент.924416 байт активно используются.Общее использование памяти (как показано в поле used_memory_rss, возвращаемом командой INFO) может быть немного выше (подробнее см. Документацию INFO ).

Данные, сохраненные в redis, очевиднотребует памяти, но это не единственная контролируемая причина использования памяти.С увеличением количества настроенных баз данных увеличивается использование памяти (в моей системе примерно на 450 байт на базу данных).Каждое соединение также использует память (в моей системе около 8 килобайт на соединение).

4 голосов
/ 18 февраля 2017

Обратите внимание, что Redis получил встроенный анализатор памяти начиная с версии 4. Использование:

"MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"
  "MEMORY STATS                         - Show memory usage details"
  "MEMORY PURGE                         - Ask the allocator to release memory"
  "MEMORY MALLOC-STATS                  - Show allocator internal stats"
1 голос
/ 11 февраля 2016

См. https://github.com/gamenet/redis-memory-analyzer

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

Вы можете сканировать все или выбранные типы Redis, такие как «string», «hash», «list», «set», «zset» и использовать шаблон сопоставления по своему усмотрению.

Также RMA пытается распознать имена ключей по шаблонам, например, если у вас есть ключи, такие как 'user: 100' и 'user: 101', приложение выберет общий шаблон 'user: *' в выводе, чтобы вы могли проанализировать большую часть памяти проблемные данные в вашем случае.

0 голосов
/ 19 ноября 2017

Если вам также интересно, как эта память распределяется между вашими ключами, вы можете попробовать https://github.com/alexdicianu/redis_toolkit.. Это работает, только если ваши ключи следуют этому шаблону A: B, A: B: C или A: B: * и т. д. Очень полезно, если вы используете Redis в качестве движка кеширования объектов для таких CMS, как Wordpress или Drupal.

Вот пример.

$ ./redis-toolkit report -type memory -name NAME
+----------------------------------------+----------+-----------+----------+
|                     KEY                | NR  KEYS | SIZE (MB) | SIZE (%) |
+----------------------------------------+----------+-----------+----------+
| posts:*                                |      500 |      0.56 |     2.79 |
| post_meta:*                            |      440 |     18.48 |    92.78 |
| terms:*                                |      192 |      0.12 |     0.63 |
| options:*                              |      109 |      0.52 |     2.59 |
0 голосов
/ 05 июля 2013

Вы можете получить представление о памяти, используемой группами клавиш, используя малоизвестную (и, вероятно, изменяемую) команду DEBUG OBJECT.

В Ruby IRB вы можете попробовать это (предупреждение, прочитает каждую клавишуможет занять некоторое время):

keys = $redis.keys;nil
map = Hash.new(0)
keys.each{|k| map[k.split(':').first] += $redis.debug("object", k).split[4].split(':')[1].to_i rescue 0};nil
map.sort_by{|x|x[1]}

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

После этого вы можете получить все ключи для префикса с помощью $ redis.keys.("префикс *") и используйте другие команды Redis для проверки каждой из них.

...