目录
- 一,ERR command not allowed when used memory > 'maxmemory'
- 1,报错信息和错误表现形式
- 2,问题分析
- 3,处理方式
- 4,rehash所需内存计算
redis错误集锦
工作中遇到的Redis出错备忘。
一,ERR command not allowed when used memory > ‘maxmemory’
1,报错信息和错误表现形式
报错信息如下:
Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR command not allowed when used memory > 'maxmemory'
在监控页面的表现形式为:
在十一点的时候Redis的内存突然暴涨,然后又下降。内存也随之增加了。使用的redis是一组四个的Redis组,十一点时只有其中Redis出现了这种情况,在之前的九点钟有另外一个Redis也出现了类似的错误。
2,问题分析
从图中可以看到实际是随着Redis key的增加,Redis进行了rehash操作,rehash操作。
rehash 是redis自身的机制,key数量越多 越容易触发rehash。
随着key数量的增多,rehash占用的内存会越来越大。
rehash 结束后,内存又会降下去,rehash 过程不会特别久。从图中也可以看出内存是先突增然后又降下去了。这是内存突增到了瓶颈,内存自动扩容,所以内存增大了。rehash结束之后内存又释放了。
3,处理方式
- 内存预留出rehash需要的空间来
- 减少key数量
4,rehash所需内存计算
rehash所需要的内存计算公式比较复杂,但是有个粗略计算的:
key数量 * 16 * 2
比如有67000000个key
67000000 * 16 * 2 / 1024 / 1024 / 1024 =1.996 大约2G