排查方法:1.查看dmesg日志或/var/log/messages,搜索OOM killer痕迹,如"Out of memory: Kill process";2.使用cat /proc/meminfo查看内存使用,监控swap使用率;3.检查ulimit -a确认进程资源限制;预防:1.设置Redis maxmemory并配置eviction策略如allkeys-lru;2.调整系统vm.overcommit_memory=1和vm.swappiness=0;3.使用supervisor或systemd监控进程自动重启;4.调大vm.min_free_kbytes和vm.dirty_ratio。
来源1
Redis进程被系统强制终止,最常见的原因就是系统内存不足,被Linux内核的OOM Killer(Out of Memory Killer)给杀了。排查方法:查看dmesg日志,里面会有类似“Out of memory: Kill process 1234 (redis-server) score 800 or sacrifice child”的记录。预防方法:1、设置Redis的maxmemory参数,并配置合适的内存淘汰策略,比如allkeys-lru;2、调整系统参数vm.overcommit_memory=1,vm.swappiness=10;3、使用容器化部署,设置内存限制。
来源2
Redis OOM Kill排查:dmesg | grep -i 'kill' 或 journalctl -k | grep -i 'oom'。检查/proc/1/oom_score_adj。预防:Redis.conf中maxmemory 4gb,maxmemory-policy volatile-lru。系统层面:echo 1 > /proc/sys/vm/overcommit_memory,sysctl vm.swappiness=0。监控内存使用,设置告警。使用docker --memory=4g限制容器内存,避免主机OOM。
来源3
Linux OOM killer优先杀内存大户Redis。排查:grep 'killed process' /var/log/messages。oom-killer日志显示分数高的进程被杀。预防:1. Redis设置maxmemory-policy allkeys-lru;2. ulimit -v 限制虚拟内存;3. systemd服务文件加MemoryLimit=4G;4. 增加物理内存或使用SSD swap但设低swappiness。
来源4
Redis被kill常见于内存峰值超限。快速排查:free -h看内存,dmesg|grep oom。预防核心:配置maxmemory 80%物理内存,eviction allkeys-lru。系统调优:vm.overcommit_memory = 1,vm.min_free_kbytes = 5%内存。进程优先级:echo -1000 > /proc/PID/oom_score_adj提高生存率。结合Prometheus监控内存告警。
来源5
当Redis内存使用率过高时,容易触发OOM。排查步骤:1. top/htop观察内存;2. dmesg或syslog找Killed;3. cat /proc/meminfo | grep CommitLimit。预防:Redis maxmemory-policy volatile-ttl,系统vm.dirty_background_ratio=5,启用transparent huge pages off。使用rdb+aof混合持久化减少fork内存峰值。
来源6
FAQ:
Q: Redis被kill后怎么快速恢复?
A: 用systemd或supervisord设置Restart=always,秒级重启。
Q: OOM分数怎么计算?
A: 基于内存占用+10*swap使用,调整oom_score_adj降低分数。
Q: Docker中Redis怎么防OOM?
A: docker run --memory=4g --memory-swap=4g,避免swap无限膨胀。
Q: maxmemory-policy选哪个好?
A: 单机allkeys-lru,集群volatile-lfu防热点key爆炸。