Управление памятью в Managed Service for Redis
Для пользовательских данных на хостах кластера Managed Service for Redis выделяется 75% от общего объема оперативной памяти. Оставшаяся память резервируется для служебных нужд процесса Redis. Объем памяти, доступной для пользовательских данных, определяется через параметр maxmemory
при запуске процесса Redis.
Резервирование памяти на хосте позволяет:
- повысить производительность и стабильность процесса Redis;
- организовать стабильное создание резервных копий.
Повышение производительности и стабильности процесса Redis
На хостах кластера Managed Service for Redis используется настройка ядра Linux vm.overcommit_memory = 0
. С помощью нее процесс Redis минимизирует количество обращений к файлу подкачки. Это повышает производительность и обеспечивает стабильную работу процесса Redis, в т. ч. при репликации и создании резервных копий.
Стабильное создание резервных копий
Резервные копии в Managed Service for Redis создаются на основе консистентного снимка памяти процесса. Снимок создается в результате копирования исходного процесса Redis с помощью системного вызова fork()
.
Использование fork()
снижает потребление RAM, т. к. исходный процесс Redis и его копия совместно используют одинаковые страницы памяти. Наличие резерва RAM и настройка vm.overcommit_memory = 0
делает использование fork()
более безопасным — создание копий не влияет на производительность основного процесса Redis.
При работе fork()
используется механизм Copy-on-Write: если совместно используемая страница памяти изменяется, то создается ее копия, куда записываются изменения. Поэтому, если во время создания резервной копии ведется запись в кластер, обновленные и новые данные занимают дополнительное место в памяти. Таким образом, при интенсивной записи память хостов может быть исчерпана даже при наличии резерва RAM. В этом случае операционная система хоста завершит процессы Redis по причине нехватки памяти (OOM, out-of-memory). Redis станет недоступен на этом хосте, а операции репликации и резервного копирования будут прерваны. Чтобы избежать этого:
- выберите такое время начала резервного копирования, когда кластер наименее нагружен;
- увеличьте объем оперативной памяти, повысив класс хостов.