一、问题

  redis 启动以后,总是隔一段时间被自动杀掉。根据分析系统日志,推测应该是系统内存不足被 OOM Killer 杀掉。

二、解决办法

(一)修改redis配置文件

由于本机自带内存只有1G,一般推荐Redis设置内存为最大物理内存的四分之三,所以设置0.75G,换成byte是751619276.

maxmemory 0.75gb
maxmemory-policy volatile-lru

(二)降低redis进程的oom adj分数

“OOM killer会在可用内存不足时选择性的杀掉用户进程,它的运行规则是怎样的,会选择哪些用户进程“下手”呢?OOM killer进程会为每个用户进程设置一个权值,这个权值越高,被“下手”的概率就越高,反之概率越低。每个进程的权值存放在/proc/{progress_id}/oom_score中,这个值是受/proc/{progress_id}/oom_adj的控制,oom_adj在不同的Linux版本的最小值不同,可以参考Linux源码中oom.h(从-15到-17)。当oom_adj设置为最小值时,该进程将不会被OOM killer杀掉。

设置方法如下:

echo -17 > /proc/${process_id}/oom_adj

${process_id}:即应用启动后的进程id

参见​​Redis进程异常退出排查​