Устранение предупреждений Redis о overcommit_memory и Transparent Huge Pages для Ubuntu 16.04 на EC2

На новом экземпляре Ubuntu 16.04 EC2 предупреждения выглядят так:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

Как избавиться от них навсегда?


person legel    schedule 17.12.2016    source источник


Ответы (2)


Как следует из предупреждения, просто добавьте строку vm.overcommit_memory=1 в конец /etc/sysctl.conf с чем-то вроде sudo vi /etc/sysctl.conf.

Но разрешения не позволяют вам редактировать THP, как предлагает предупреждение, поэтому вместо этого сделайте

sudo apt install hugepages

и добавьте команду sudo hugeadm --thp-never в конец вашего .bashrc с чем-то вроде sudo vi ~/.bashrc.

Затем просто sudo reboot и в следующий раз, когда вы запустите SSH redis-server, предупреждения исчезнут!

person legel    schedule 17.12.2016
comment
Опасно ли просто убрать предупреждение? Когда желательно, чтобы «фоновое сохранение» не работало в условиях нехватки памяти? Может быть проблематично просто установить «vm.overcommit_memory=1» вслепую? - person Scott Skiles; 10.01.2018
comment
@ScottSkiles: я считаю, что Redis выполняет фоновое сохранение, вызывая fork(), что немедленно удваивает видимое использование памяти. Но поскольку это все виртуальная память, пока что-то не изменится в родительском, все должно быть в порядке, пока не завершится сохранение. - person Zan Lynx; 21.07.2018
comment
как это сделать в докер-контейнере? - person Heril Muratovic; 30.03.2019
comment
@HerilMuratovic, согласно обсуждениям, которые я видел на github, эти настройки (вероятно) передаются в хост-систему, и докер получает их оттуда. Например: github.com/docker-library/redis/issues/19# issuecomment-96080885 - person Kostas Mouratidis; 14.07.2019

С Linux и Ubuntu я сделал это перед запуском redis-server, и, похоже, это работает...

sudo add-apt-repository ppa:redislabs/redis
sudo apt-get update
sudo apt-get install redis

https://redis.io/download

person Sebastien SCIRPO    schedule 06.05.2021
comment
Хорошо, похоже, это лучшее решение (достигается с помощью родной библиотеки). Если кто-то сможет подтвердить, что это решает проблему, я назначу это новым лучшим ответом. - person legel; 09.05.2021