Redis: OOM command not allowed when used memory > ‘maxmemory’


現象

日志里出現異常:

OOM command not allowed when used memory > 'maxmemory'

原因

內存已滿,不允許再存數據了,可以通過redis-cli 查看redis的具體信息

127.0.0.1:6379> info memory
# Memory
used_memory:4120248
used_memory_human:3.93M
used_memory_rss:11509760
used_memory_peak:1977983104
used_memory_peak_human:1.84G
used_memory_lua:36864
mem_fragmentation_ratio:2.79
mem_allocator:jemalloc-3.6.0

注:

  • used_memory_human表示已用內存
  • used_memory_rss表示系統給redis分配的內存(即常駐內存)
  • mem_fragmentation_ratio=used_memory_rss/used_memory比例,一般情況下,used_memory_rss略高於used_memory,當內存碎片較多時,則mem_fragmentation_ratio會較大,可以反映內存碎片是否很多

解決

注:如修改了配置文件需重啟redis

1. 增加redis內存,修改redis.conf

maxmemory 2gb

2. 修改redis存儲策略

默認的redis設置是非常保守的,即內存超限后就不在存儲,可以把策略修改為LRU算法(最近最少使用算法)——新存儲的信息會替換掉舊的信息,從而不會是內存越線,修改redis.conf

maxmemory-policy volatile-lru

3. 少往reids存數據

是否有必要把這么多數據存入redis?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM