为 EC2 上的 Ubuntu 16.04 解决关于 overcommit_memory 和透明大页面的 Redis 警告

Posted

技术标签:

【中文标题】为 EC2 上的 Ubuntu 16.04 解决关于 overcommit_memory 和透明大页面的 Redis 警告【英文标题】:Solving Redis warnings on overcommit_memory and Transparent Huge Pages for Ubuntu 16.04 on EC2 【发布时间】:2017-05-03 09:03:37 【问题描述】:

在新的 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.

如何永久消除它们?

【问题讨论】:

【参考方案1】:

就像警告所暗示的那样,只需将行 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,警告就消失了!

【讨论】:

让警告消失真的很危险吗?什么时候需要“后台保存”在内存不足的情况下失败?盲目设置'vm.overcommit_memory=1'会不会有问题? @ScottSkiles:我相信 Redis 会通过调用 fork() 进行后台保存,这会立即加倍明显的内存使用。但是由于在父项发生变化之前它都是虚拟内存,所以在保存完成之前一切都应该没问题。 如何在 docker 容器中做到这一点? @HerilMuratovic 根据我在 github 上看到的讨论,这些设置(可能)在主机系统上进行,docker 从那里获取它们。例如:github.com/docker-library/redis/issues/19#issuecomment-96080885【参考方案2】:

使用 Linux 和 Ubuntu,我在运行 redis-server 之前这样做了,它似乎可以工作......

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

https://redis.io/download

【讨论】:

很好,这似乎是一个更好的修复(通过本机库实现)。如果有人可以验证这解决了问题,那么我会将其授予新的最佳答案。 在我的例子中,通过指定的 PPA 将 redis 升级到 v.6.2.6 删除了透明大页面警告,但不是 overcommit_memory 警告

以上是关于为 EC2 上的 Ubuntu 16.04 解决关于 overcommit_memory 和透明大页面的 Redis 警告的主要内容,如果未能解决你的问题,请参考以下文章

sh 安装php7.1 ubuntu 16.04 EC2

声音驱动程序 - AWS EC2 ubuntu 16.04 实例的 snd-aloop 内核模块设置问题

问题记录 为ubuntu16.04添加windows字体(解决JIRA图表乱码的问题)

无法在 Ubuntu 16.04 AWS EC2 实例上使用 puppeteer 启动 chromium headless

NVidia 驱动程序停止在带有 Ubuntu 16.04 和 Tesla K80 GPU 的 AWS EC2 实例上工作

Ubuntu 16.04屏幕阅读Screen Reader导致快捷键失灵的问题解决