无法在 Redis 服务器中设置 activedefrag yes

无法在 Redis 服务器中设置 activedefrag yes

我有一个 Redis 集群,其内存碎片率始终保持在 2 左右。

我尝试activedefrag通过运行CONFIG SET activedefrag yes来启用redis-cli,但收到错误消息:

(错误)ERR CONFIG SET‘activedefrag’的参数‘yes’无效 - 无法启用主动碎片整理:它需要一个使用修改后的 Jemalloc 编译的 Redis 服务器,就像 Redis 源分发版默认附带的服务器一样

Ubuntu 22.04 附带的 redis-server 软件包是 6.0,版本字符串看起来像是使用 jemalloc 编译的。

# redis-server --version
Redis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=a3fdef44459b3ad6

ldd 确认它与 libjemalloc 链接。

# ldd `which redis-server`
        ...
        libjemalloc.so.2 => /lib/x86_64-linux-gnu/libjemalloc.so.2 (0x00007f0428b26000)

在配置文件中设置选项时,redis-server 无法启动,并显示类似的错误消息。

我是否遗漏了某些选项,或者我是否需要自己编译 Redis 才能使用碎片整理?我找不到任何配置选项“启用” jemalloc。

答案1

我使用官方redis:6.0镜像启动了一个 docker 容器,这里的设置有效,并且版本字符串看起来基本相同。

root@42613c835e31:/data# redis-server --version
Redis server v=6.0.19 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=3aa1eb72f68fbe5e
root@42613c835e31:/data# redis-cli
127.0.0.1:6379> CONFIG SET activedefrag yes
OK

ldd显示它没有链接到 jemalloc 库:

root@42613c835e31:/data# ldd `which redis-server`
        linux-vdso.so.1 (0x00007ffe4a9a2000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5b6aa41000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5b6aa3b000)
        libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f5b6a9a8000)
        libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f5b6a6b3000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5b6a691000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5b6a4bd000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5b6afa2000)

Ubuntu 软件包似乎没有编译所需的修改的jemalloc 库,但使用 Ubuntu 默认库。

所以我目前看到的唯一选择是:

Redis repo 中的软件包是使用修改后的 jemalloc 编译的,activedefrag 配置可与其配合使用。这似乎是最有希望的选项,因为更新将通过常规系统更新自动处理。接下来我将尝试从 Ubuntu 软件包切换到它。

相关内容