RedisのOOM command not allowed when used memoryエラーについて
OSX上でRedisの動作を確認しているのですが、以下のエラーが出る原因を詳しく知りたいです。
OOM command not allowed when used memory
環境は、
- Redis 2.8.19
- maxmemory-policy allkeys-lru
設定ファイルは、maxmemory-policy allkeys-lru
としているのに、上記のエラーが出るのは何故か。と調べたところ、
英語版のstackoverflowにありました。
この回答によるとused_memory_lua
がメモリを多く使用しているからという感じでしたが、
used_memory_luaが多くなる原因が知りたいです。
ローカル環境で、
- maxmemory 1080KB
- maxmemory-policy allkeys-lru
として、メモリ使用量が超えた時の動作を確認していたのです。
(一度エラーが出た後に、Redisを再起動するとエラーがなかなか出ません。)
コマンドinfo
で確認すると、
\# Memory
used_memory:1090400
used_memory_human:1.04M
used_memory_rss:1916928
used_memory_peak:1105312
used_memory_peak_human:1.05M
used_memory_lua:35840
mem_fragmentation_ratio:1.76
mem_allocator:libc
という状態なのですが、used_memory_luaが上記より増加していくのか、
増加するとOOMエラーが出るのか。その上限値は?など。
目的は
- redisサーバはAWS Elasticache 256MB(cache.t1.micro)を使っている
- redisのデータはTTL(期限?)が設定してあるものとないものが混在
- キャッシュと一時的なデータだけなので永続化は不要
- メモリ容量が超えた場合の削除順もランダムでいい
なのですが、例えば以下の環境だと、エラーを出さずにデータをランダムに削除して使うには、
どのような設定になるのでしょう?
- サーバのメモリが512MB
- Redisのmaxmemoryが256MB
- used_memory_luaはどのくらいの容量になる?
- 目的を果たすにはどのような設定が必要なのか?
==== 追記(エラー時のメモリinfo) ====
エラー時の値です。エラーが出る基準がわかりません。
\# Memory
used_memory:1038432
used_memory_human:1014.09K
used_memory_rss:2031616
used_memory_peak:1105312
used_memory_peak_human:1.05M
used_memory_lua:35840
mem_fragmentation_ratio:1.96
mem_allocator:libc