因为意外事故redis内存增加了很多,我们删除了很多未使用的密钥,但是内存没有释放,有没有办法手动释放它,除了重启redis。
redis info
# Memory used_memory:14166381000 used_memory_human:13.19G used_memory_rss:41278218240 used_memory_peak:50044293760 used_memory_peak_human:46.61G used_memory_lua:31744 mem_fragmentation_ratio:2.91 mem_allocator:jemalloc-3.2.0
nmon t
│ Top Processes Procs=288 mode=3 (1=Basic, 3=Perf 4=Size 5=I/O)──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│ │ PID %CPU Size Res Res Res Res Shared Faults Command │ │ Used KB Set Text Data Lib KB Min Maj │ │ 1732 15.9 58932952 40309580 756 58921404 0 944 9 0 redis-server
free -m total used free shared buffers cached Mem: 64378 61914 2464 0 11 22 -/+ buffers/cache: 61879 2498 Swap: 32255 16710 15545
答案 0 :(得分:2)
根据antirez https://groups.google.com/forum/#!topic/redis-db/ibhYDLT_n68(第一个答案),Redis总是使用used_memory_peak作为对它可能需要多少内存的引用(以及它想要分配多少内存)。
如果你真的需要在没有停机的情况下释放内存 - 你可以设置一个从机,让它读写CONFIG SET slave-read-only no
将你的应用程序流量重新路由到从机并重新启动主机。或者继续使用奴隶(通过使其成为主人SLAVEOF NO ONE
)