你的 Redis 容器启动时报了两个典型警告问题,分别是:
💥 问题 1:/proc/sys/net/core/somaxconn
设置太小
复制编辑
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
含义: Redis 默认希望 backlog
至少是 511
,但你的内核参数 somaxconn
只有 128
,不够用。
解决方法: 在宿主机执行以下命令提升这个内核参数值:
复制编辑
echo 511 > /proc/sys/net/core/somaxconn
为了永久生效:
编辑 /etc/sysctl.conf
,添加:
复制编辑
net.core.somaxconn = 511
然后执行:
复制编辑
sysctl -p
💥 问题 2:ARM64 内核 BUG 警告
WARNING Your kernel has a bug that could lead to data corruption during background save. Please upgrade to the latest stable kernel. ... ARM64-COW-BUG
含义: 你当前使用的 ARM64 架构 Linux 内核存在一个 COW(Copy-On-Write)相关的 bug,可能在 Redis 执行 RDB 或 AOF 持久化时导致数据损坏。
解决方法:
✅ 临时忽略(不推荐正式环境)
如果你确定你的业务不依赖持久化(或你愿意冒风险),可以让 Redis 启动时忽略这个警告:
修改 Redis 配置文件(或 Docker 启动参数)添加:
ignore-warnings ARM64-COW-BUG
比如 docker-compose 可以这样:
yaml
复制编辑
command: ["redis-server", "--ignore-warnings", "ARM64-COW-BUG"]
✅ 推荐方法:升级内核(正式方案)
使用已修复该 bug 的新内核版本。你可以查看当前内核版本:
复制编辑
uname -a
然后去对应 Linux 发行版查看是否有修复版本,比如 Ubuntu 可用 apt
升级内核。
✅ 总结
问题 | 建议 |
---|---|
somaxconn 太小 | echo 511 > /proc/sys/net/core/somaxconn ,并修改 /etc/sysctl.conf |
ARM64 内核 bug | 临时加 --ignore-warnings ARM64-COW-BUG ;推荐升级内核 |
docker-compose.yml
version: '3.8'
services:
redis:
image: redis:6.2.17
container_name: redis
command: ["redis-server", "--ignore-warnings", "ARM64-COW-BUG"]
sysctls:
net.core.somaxconn: "511"
ports:
- "6379:6379"
restart: unless-stopped