Linux中Redis安装报错:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

Redis2.6之后 默认使用 jemalloc 作为内存分配器来提升内存管理性能。

出现这个报错的原因是:

默认情况下,Redis 的构建系统(Makefile)并不会自动使用这个内置的 jemalloc,而是优先尝试使用系统的 jemalloc,如果系统没有jemalloc就会报这个错。

Redis构建系统的行为逻辑:

Redis 的 Makefile 在决定使用哪种内存分配器时,大致按以下顺序判断:

  1. 是否设置了 MALLOC=xxx 环境变量?

  2. 如果没有,尝试检测系统是否安装了 jemalloc

    • 如果检测到:就用系统的 jemalloc,并定义宏 USE_JEMALLOC

    • 如果没检测到:才使用内置的 deps/jemalloc

  3. 如果都不行,回退到 libc malloc

但由于检测机制不完善,有时会“误判”——即使你没装系统 jemalloc,它也以为你装了,于是尝试包含头文件,结果失败。

解决方法:

由于redis源码中自带了jemalloc在目录deps/中,所以我们可以强制使用Redis内置的jemalloc

步骤:

进入redis源码目录中运行make MALLOC=libc(如果你查过相关的资料会发现这个其实是指定使用系统的malloc但是我们现在要用的是jemalloc)

Redis 的构建系统有一个“隐藏逻辑”:

  • 当你指定 MALLOC=libc 时,Redis 会跳过对系统 jemalloc 的检测

  • 然后它会自动启用 内置的 jemalloc(来自 deps/jemalloc,而不是真的用 libc malloc

这是 Redis 官方的一种“绕过检测”的技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值