Redis内存溢出问题排查
最近生产环境服务器上的redis内存波动,导致了一次OOM,查询/var/log/messages后发现原本只会在1~2G大小之间波动的Redis内存竟然达到8G,然后OOM被主动Kill。
因为过年期间并没有更新过代码,所以一直完好运行的程序应该不会出现大的BUG去大量写入数据到Redis。于是检查起Redis配置(redis_version:3.2.10)。
设置 maxmemory
查看了一下正在运行的Redismaxmemory为0
1
2
3127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"
设定一个合理的最大使用量避免OOM,我这边根据业务实际情况设置成2G
1
2
3
4
5127.0.0.1:6379> CONFIG SET maxmemory 2G
OK
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2147483648"
另外在/etc/redis.conf设置maxmemory 2G
刷新策略
观察服务器内存碎片是否过高,公式如下
1mem_fragmentation_ratio=used_memory_rss/used_memory
当值大于1时表明有内存碎片,越大越多。小于1代表正在使用虚拟内存(使用磁盘),需要增加内存。
值在1~1.5之间属于较好范围。我观察到服务配置中使用的是默认的永