1、问题现象
24163:M 10 May 2020 22:27:22.177 * Background saving started by pid 24248
24163:M 10 May 2020 22:27:22.288 # Background saving terminated by signal 9
redis 启动后,linux 内存
redis启动过程中,内存使用过程
启动成功后,内存和swap空间都用完了
redis info 内存信息
redis 日志
2、分析
Linux 物理内存只有3G,redis没有配置最大使用内存,而且redis持久化的数据有3G多。正常启动后,redis开始加载aof文件数据,最后正常启动。但是由于启动之前已经有部分改动数据,导致redis触发rdb持久化机制。
3、解决方案
3.1 建议redis的配置最大内存不要超过服务器的3/5
3.2 设置linux的内存分配策略:overcommit_memory
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
查看值:
cat /proc/sys/vm/overcommit_memory
修改值:
有三种方式修改内核参数,但要有root权限:
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory