如何解决Redis服务关于内核参数vm.overcommit_memory的警告?
解决Yocto系统中Redis的overcommit_memory警告问题
方案1:使用sysctl.d目录配置(推荐)
Yocto等嵌入式Linux系统通常优先读取/etc/sysctl.d/目录下的分散配置文件,而非单独的/etc/sysctl.conf,按以下步骤操作:
- 创建Redis专用的sysctl配置文件:
echo "vm.overcommit_memory = 1" > /etc/sysctl.d/90-redis.conf - 立即加载新配置(无需重启系统):
sysctl --system - 验证参数是否生效:
返回sysctl vm.overcommit_memoryvm.overcommit_memory = 1则说明配置生效。 - 重启Redis服务并检查警告是否消失:
systemctl restart redis journalctl -u redis | grep overcommit_memory
方案2:修改Redis systemd服务文件
如果sysctl配置仍不生效,可直接在Redis的systemd服务中添加预启动命令强制设置参数:
- 编辑Redis服务文件(路径可能为
/usr/lib/systemd/system/redis.service或/etc/systemd/system/redis.service,根据Yocto实际安装路径调整):vi /usr/lib/systemd/system/redis.service - 在
[Service]段添加以下内容:ExecStartPre=/sbin/sysctl vm.overcommit_memory=1 - 重新加载systemd配置并重启Redis:
systemctl daemon-reload systemctl restart redis
方案3:Yocto构建时内置配置(适用于自定义镜像)
如果是自行构建Yocto镜像,可在配方中预设该配置,避免后续手动操作:
- 在Redis配方(或系统基础配方)的
files目录下创建90-redis.conf文件,内容为:vm.overcommit_memory = 1 - 在配方的
.bb文件中添加:FILES_${PN} += "${sysconfdir}/sysctl.d/90-redis.conf" SRC_URI += "file://90-redis.conf" - 重新构建镜像,生成的系统会默认加载该配置。
排查要点
- 执行
sysctl --system命令,查看输出的配置文件加载列表,确认你的配置文件被正确读取。 - 若重启后参数被重置,检查系统是否有其他启动脚本、内存管理工具覆盖了该参数。
内容的提问来源于stack exchange,提问作者User051209
相关产品推荐
相关产品推荐

