Redis在小数据集上消耗大量内存

3

我正在运行redis-server,根据prstat,它在使用3721M的内存。当我在redis-cli中运行info命令时,内存使用情况如下:

used_memory:8739028 
used_memory_human:8.33M
used_memory_rss:8739028
mem_fragmentation_ratio:1.00

我正在一台2GB的云实例上运行,所以我的内存利用率始终很高。然而,即使我在redis上执行flushall,它似乎对内存消耗没有影响。

这可能是由于某个设置分配了内存或者有任何想法,为什么Redis在实际数据之上使用了如此多的内存?

谢谢!

编辑:

还要补充的是,我在另一个实例上运行相同的设置(应用程序/redis),内存消耗只有554M,其中used_memory_human:5.68M是数据。

pmap的响应:

[root@]# pmap -x 27425

27425:  /opt/local/bin/redis-server /opt/local/etc/redis.conf
 Address  Kbytes     RSS    Anon  Locked Mode   Mapped File
08046000       8       8       8       - rw---    [ stack ]
08050000     208     160       -       - r-x--  redis-server
08093000       8       8       4       - rwx--  redis-server
08095000 3807836 3804160 3764928       - rwx--    [ heap ]
FE9BD000      12      12       -       - r-x--  libpthread.so.1
FEAF0000     456     456       -       - r-x--  libnsl.so.1
FEB72000       8       8       4       - rw---  libnsl.so.1
FEB74000      20      16       4       - rw---  libnsl.so.1
FEBA0000     304     304       -       - r-x--  libm.so.2
FEBFB000      16      16       -       - rwx--  libm.so.2
FEDA0000       4       4       -       - r--s-  dev:531,392 ino:3736139179
FEDB0000       4       4       -       - rwxs-    [ anon ]
FEDC0000      24      12       8       - rwx--    [ anon ]
FEDD0000       4       4       4       - rwx--    [ anon ]
FEDE0000    1216    1216       -       - r-x--  libc.so.1
FEF10000      36      36      24       - rwx--  libc.so.1
FEF19000       8       8       4       - rwx--  libc.so.1
FEF20000       4       4       4       - rwx--    [ anon ]
FEF30000      56      56       -       - r-x--  libsocket.so.1
FEF4E000       4       4       -       - rw---  libsocket.so.1
FEF50000       4       4       4       - rwx--    [ anon ]
FEF60000       4       4       -       - r-x--  libdl.so.1
FEF70000       4       4       -       - r--s-  ld.config
FEF80000       4       4       4       - rw---    [ anon ]
FEF90000       4       -       -       - rw---    [ anon ]
FEFA0000       4       4       4       - rwx--    [ anon ]
FEFB0000       4       4       -       - rwx--    [ anon ]
FEFB7000     208     208       -       - r-x--  ld.so.1
FEFFB000       8       8       4       - rwx--  ld.so.1
FEFFD000       4       4       -       - rwx--  ld.so.1

限制在配置中没有启用任何内容,这里是虚拟内存和高级选项:
VIRTUAL MEMORY
vm-enabled no
vm-swap-file /tmp/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4


ADVANCED CONFIG
hash-max-zipmap-entries 512
hash-max-zipmap-value 64

Redis的版本是什么?你使用哪个主机服务商?你自己安装了Redis吗?你的redis.conf文件是什么样子的?这些信息可能会让我们更接近找出问题所在。 - j.w.r
@j.w.r,Redis版本2.2.2,托管在Joyent上,我自己安装了Redis。我应该粘贴整个配置文件还是有特定的项目要发布? - dzm
配置文件中的“limits”、“虚拟内存”(如果存在)和“高级”部分应该没问题。另外,prstat 中的 SIZE 和 RSS 值是多少?3721M 的数字听起来像是包括了 VM/共享内存/内存映射文件等的 SIZE,可能会误导人,我通常看的是 RSS。尝试运行 pmap -x PID-of-redis 并发布其输出结果。 - j.w.r
@j.w.r,谢谢,刚刚用pmap更新了结果。从prstat来看,SIZE为3721M,而RSS为3716M。 - dzm
抱歉回复慢了,最近很忙。另一个问题:这个进程是什么时候开始的?它已经运行了几个小时、几天、几周等等。 - j.w.r
@j.w.r,没问题!它已经运行了大约两个月。 - dzm
1个回答

0

这个问题有点老了,但我以前也遇到过这个问题。如果我没记错的话,我关闭了我的redis实例,如果适用的话删除了RDB文件,然后重新启动redis。如果不想删除包含您需要的数据的RDB文件,我不建议这样做。您可以尝试DEL您可以删除的内容,然后执行SAVE(我相信当redis关闭时会执行SAVE,因此可能是多余的),然后重新启动。

如果您还没有升级到最新的稳定版本,现在是一个好时机来升级redis。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接