發(fā)現(xiàn)
在 jedis 寫入 key 時(shí)發(fā)現(xiàn)了以下異常日志(部分)
OOM command not allowed when used memory > 'maxmemory'.
排查
- 服務(wù)器內(nèi)存是否滿了
- redis 內(nèi)存限制是否超過限制了
方法
服務(wù)器內(nèi)存是否滿可以使用 free 命令,這里就不寫了
我們主要來看下如何判斷 redis 內(nèi)存是否超過限制了
$ redis-cli -h xxx.xxx.xxx.xxx -p 6379
$ xxx.xxx.xxx.xxx:6379> info
查找 used_memory 和 maxmemory
human 后綴表示已轉(zhuǎn)換成適合人類閱讀的文本
used_memory:270098024
used_memory_human:257.59M
...
maxmemory:200000000
maxmemory_human:190.73M
我們看到此時(shí)內(nèi)存最大使用限制為 190M,而已使用了 257M
看來是超過 redis 內(nèi)存使用限制了,那是不是存在大 key?
我們?cè)囋囀褂么?key 排查命令
$ redis-cli --bigkeys -h xxx.xxx.xxx.xxx -p 6379
顯示結(jié)果:
Biggest string found 'XXX' has 237535676 bytes
至此問題排查完畢,是大 key 導(dǎo)致 redis 內(nèi)存超過限制,無法再寫入