Используемая память больше, чем максимальная память в Redis - PullRequest
0 голосов
/ 15 апреля 2020

Я установил maxmemory 4 G для сервера redis, а политика удаления - volatile-lru . В настоящее время он использует около 4.41G памяти. Я не знаю, как это возможно. Так как политика удаления установлена, она должна начать удалять ключи, как только память достигнет максимальной памяти. Я запускаю Redis в режиме кластера, имея конфигурацию 3 master и коэффициент репликации 1. Это происходит только на одном из подчиненных redis.

Выход

redis-cli info memory

: -

# Memory
used_memory:4734647320
used_memory_human:4.41G
used_memory_rss:4837548032
used_memory_rss_human:4.51G
used_memory_peak:4928818072
used_memory_peak_human:4.59G
used_memory_peak_perc:96.06%
used_memory_overhead:2323825684
used_memory_startup:1463072
used_memory_dataset:2410821636
used_memory_dataset_perc:50.93%
allocator_allocated:4734678320
allocator_active:4773904384
allocator_resident:4844134400
total_system_memory:32891367424
total_system_memory_human:30.63G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:4294967296
maxmemory_human:4.00G
maxmemory_policy:volatile-lru
allocator_frag_ratio:1.01
allocator_frag_bytes:39226064
allocator_rss_ratio:1.01
allocator_rss_bytes:70230016
rss_overhead_ratio:1.00
rss_overhead_bytes:-6586368
mem_fragmentation_ratio:1.02
mem_fragmentation_bytes:102920560
mem_not_counted_for_evict:0
mem_replication_backlog:1048576
mem_clients_slaves:0
mem_clients_normal:1926964
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0

1 Ответ

0 голосов
/ 16 апреля 2020

Важно понимать, что процесс выселения работает следующим образом:

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

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

Ссылка: https://redis.io/topics/lru-cache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...