Redis - мониторинг использования памяти - PullRequest
8 голосов
/ 23 июня 2011

Я сейчас проверяю вставку ключей в базу данных Redis (на локальную). У меня более 5 миллионов ключей, и у меня всего 4 ГБ ОЗУ, поэтому в один момент я достигаю объема ОЗУ и меняю заполнение подкачки (и мой компьютер выключается) ...

Моя проблема: Как я могу отслеживать использование памяти на компьютере, на котором установлена ​​база данных Redis, и таким образом предупреждать, чтобы больше не вставлять некоторые ключи в базу данных Redis?

Спасибо.

Ответы [ 3 ]

9 голосов
/ 02 апреля 2017

Память является критическим ресурсом для производительности Redis.Используемая память определяет общее количество байтов, выделенных Redis с использованием его распределителя (либо стандартного libc, jemalloc, либо альтернативного распределителя, такого как tcmalloc).

Вы можете собрать все данные метрик использования памяти для экземпляра Redis, выполнив «информационная память ».

127.0.0.1:6379> info memory
Memory
used_memory:1007280
used_memory_human:983.67K
used_memory_rss:2002944
used_memory_rss_human:1.91M
used_memory_peak:1008128
used_memory_peak_human:984.50K

Иногда, когда Redis настроен без ограничения максимальной памяти, использование памяти в конечном итоге достигнет системной памяти, и сервер начнет выдавать ошибки« Out of Memory ».В других случаях Redis настраивается с максимальным ограничением памяти, но с политикой исключения.Это может привести к тому, что сервер не будет высвобождать какие-либо ключи, тем самым предотвращая любые записи до освобождения памяти.Решением таких проблем будет настройка Redis с максимальной памятью и некоторой политикой удаления.В этом случае сервер начинает извлекать ключи, используя политику вытеснения, когда использование памяти достигает максимального значения.

Память RSS (Resident Set Size) - это количество байтов, выделенных операционной системой для Redis.Если отношение «memory_rss» к «memory_used» превышает ~ 1,5, то это означает фрагментацию памяти.Фрагментированная память может быть восстановлена ​​путем перезапуска сервера.

5 голосов
/ 23 июня 2011

Что касается использования памяти, я бы посоветовал вам взглянуть на redis.io FAQ и эту статью о использовании redis в качестве кэша LRU .

Вы можете ограничить использование памяти с помощью параметра конфигурации maxmemory, и в этом случае при достижении предела памяти все запросы на запись завершатся с ошибкой, или вы можете установить для maxmemory-policy значение allkeys-lru, например: начать перезаписывать на сервере наименее недавно использованные данные тем, что вам нужно в данный момент, и т. д. В большинстве случаев у вас достаточно гибкости для решения таких проблем с помощью правильной конфигурации.

Мой совет: не усложняйте ситуацию и управляйте этой проблемой с помощью конфигурации сервера Redis, а не вносите дополнительную сложность с помощью мониторинга на уровне операционной системы или тому подобного.

4 голосов
/ 23 июня 2011

Есть хорошая утилита Unix с именем vmstat.Это как top, но командная строка, так что вы можете получить использование памяти и подготовиться, прежде чем ваша система остановитсяВы также можете использовать ps v PID, чтобы получить эту информацию о конкретном процессе.PID Redis можно получить следующим образом: pidof redis-server

...