Я перезапустил свой сервер Redis через 120 дней.
Перед перезапуском использование памяти 29,5 ГБ
После перезапуска использование памяти 27,5 ГБ
Итак, как уменьшается 2 ГБ?
Освободить память в оперативной памяти, как в этой статье https://redis.io/topics/memory-optimization
Redis не всегда освобождает (возвращает) память операционной системе при удалении ключей.Это не является чем-то особенным в Redis, но именно так работает большинство реализаций malloc ().Например, если вы заполняете экземпляр данными объемом 5 ГБ, а затем удаляете эквивалент 2 ГБ данных, размер резидентного набора (также известный как RSS, то есть число страниц памяти, потребляемых процессом), вероятно, все равно будетоколо 5 ГБ, даже если Redis будет утверждать, что объем памяти пользователя составляет около 3 ГБ.Это происходит потому, что основной распределитель не может легко освободить память.Например, часто большинство удаленных ключей размещаются на тех же страницах, что и другие ключи, которые все еще существуют.Предыдущий пункт означает, что вам нужно выделять память на основе вашего пикового использования памяти.Если вашей рабочей нагрузке время от времени требуется 10 ГБ, даже если в большинстве случаев это может быть 5 ГБ, вам необходимо выделить 10 ГБ.
Однако распределители разумны и могут повторно использовать свободные порции памяти, поэтому послеОсвободив 2 ГБ из вашего набора данных 5 ГБ, когда вы снова начнете добавлять ключи, вы увидите, что RSS (размер резидентного набора) остается стабильным и не увеличивается, поскольку вы добавляете до 2 ГБ дополнительных ключей.Распределитель в основном пытается повторно использовать 2 ГБ памяти, ранее (логически) освобожденной.
Из-за всего этого коэффициент фрагментации не является надежным, если у вас было использование памяти, которое на пике намного больше, чем используемое в настоящее времяобъем памяти.Фрагментация рассчитывается как объем используемой в данный момент памяти (как сумма всех выделений, выполненных Redis), деленная на фактически использованную физическую память (значение RSS).Поскольку RSS отражает пиковую память, когда (практически) используемая память мала, поскольку было освобождено много ключей / значений, но RSS высока, отношение mem_used / RSS будет очень высоким.
Или свободная память кэшей, которая использовалась моим сервером Redis?
Redis использует кэш?Кеш кеша?
Спасибо!