发现
在 jedis 写入 key 时发现了以下异常日志(部分)
OOM command not allowed when used memory > 'maxmemory'.
排查
- 服务器内存是否满了
- redis 内存限制是否超过限制了
方法
服务器内存是否满可以使用 free
命令,这里就不写了
我们主要来看下如何判断 redis 内存是否超过限制了
$ redis-cli -h xxx.xxx.xxx.xxx -p 6379
$ xxx.xxx.xxx.xxx:6379> info
查找 used_memory
和 maxmemory
human
后缀表示已转换成适合人类阅读的文本
used_memory:270098024
used_memory_human:257.59M
...
maxmemory:200000000
maxmemory_human:190.73M
我们看到此时内存最大使用限制为 190M,而已使用了 257M
看来是超过 redis 内存使用限制了,那是不是存在大 key?
我们试试使用大 key 排查命令
$ redis-cli --bigkeys -h xxx.xxx.xxx.xxx -p 6379
显示结果:
Biggest string found 'XXX' has 237535676 bytes
至此问题排查完毕,是大 key 导致 redis 内存超过限制,无法再写入