linux yum jemalloc,Redis安装报错error:jemalloc/jemalloc.h:No such file or directory解决方法

安装Redis

下载Redis:

$ wget https://github.com/antirez/redis/archive/3.2.0.tar.gz

1

$wgethttps://github.com/antirez/redis/archive/3.2.0.tar.gz

在安装Redis之前,需要安装Redis的依赖程序tcl,如果不安装tcl在Redis执行make test的时候就会报错的哦。

$ yum install -y tcl

1

$yuminstall-ytcl

$ tar xvf 3.2.0.tar.gz -C /usr/local

$ cd /usr/local/

$ mv redis-3.2.0 redis

$ cd redis

$ make

$ make test

$ make install

$ mkdir /etc/redis

$ cp redis/redis.conf /etc/

1

2

3

4

5

6

7

8

9

$tarxvf3.2.0.tar.gz-C/usr/local

$cd/usr/local/

$mvredis-3.2.0redis

$cdredis

$make

$maketest

$makeinstall

$mkdir/etc/redis

$cpredis/redis.conf/etc/

以redis用户启动redis

$ useradd -s /bin/false -M redis

$ sudo -u redis `which redis-server` /etc/redis.conf

1

2

$useradd-s/bin/false-Mredis

$sudo-uredis`whichredis-server`/etc/redis.conf

错误描述

如果在make时,Redis报错:

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory

zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

1

2

zmalloc.h:50:31:error:jemalloc/jemalloc.h:Nosuchfileordirectory

zmalloc.h:55:2:error:#error "Newer version of jemalloc required"

原因分析

在README有这个一段话。

Allocator

---------

Selecting a non-default memory allocator when building Redis is done by setting

the `MALLOC` environment variable. Redis is compiled and linked against libc

malloc by default, with the exception of jemalloc being the default on Linux

systems. This default was picked because jemalloc has proven to have fewer

fragmentation problems than libc malloc.

To force compiling against libc malloc, use:

% make MALLOC=libc

To compile against jemalloc on Mac OS X systems, use:

% make MALLOC=jemalloc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Allocator

---------

Selectinganon-defaultmemoryallocatorwhenbuildingRedisisdonebysetting

the`MALLOC`environmentvariable.Redisiscompiledandlinkedagainstlibc

mallocbydefault,withtheexceptionofjemallocbeingthedefaultonLinux

systems.Thisdefaultwaspickedbecausejemallochasproventohavefewer

fragmentationproblemsthanlibcmalloc.

Toforcecompilingagainstlibcmalloc,use:

%makeMALLOC=libc

TocompileagainstjemalloconMacOSXsystems,use:

%makeMALLOC=jemalloc

Redis在安装时关于内存分配器allocator, 如果指定了MALLOC这个环境变量,那么会用这个环境变量的去建立Redis。如果没有,那么就是用默认的分配器

Redis 2.4版本之后,默认使用jemalloc来做内存管理,因为jemalloc被证明解决fragmentation problems(内存碎片化问题)比libc更好。但是如果你又没有jemalloc而只有libc,当make出错时,你可以加这么一个参数即可。

make MALLOC=libc

1

makeMALLOC=libc

如果想用jemalloc,安装jemalloc即可。

如果使用yum安装的话需要安装EPEL源。

$ yum install jemalloc

$ rpm -ql jemalloc

/usr/bin/jemalloc.sh

/usr/lib64/libjemalloc.so.1

1

2

3

4

$yuminstalljemalloc

$rpm-qljemalloc

/usr/bin/jemalloc.sh

/usr/lib64/libjemalloc.so.1

也可以编译安装,先下载jemalloc:

$ tar xvf jemalloc-4.2.1.tar.bz2

$ cd jemalloc-4.2.1

$ ./configure --prefix=/usr/local/jemalloc

$ make && make install

1

2

3

4

$tarxvfjemalloc-4.2.1.tar.bz2

$cdjemalloc-4.2.1

$./configure--prefix=/usr/local/jemalloc

$make&&makeinstall

$ ll /usr/local/jemalloc/

total 16

drwxr-xr-x 2 root root 4096 Nov 7 16:47 bin

drwxr-xr-x 3 root root 4096 Nov 7 16:47 include

drwxr-xr-x 3 root root 4096 Nov 7 16:47 lib

drwxr-xr-x 4 root root 4096 Nov 7 16:47 share

1

2

3

4

5

6

$ll/usr/local/jemalloc/

total16

drwxr-xr-x2rootroot4096Nov716:47bin

drwxr-xr-x3rootroot4096Nov716:47include

drwxr-xr-x3rootroot4096Nov716:47lib

drwxr-xr-x4rootroot4096Nov716:47share

然后再编译redis的时候指定MALLOC,如下:

make MALLOC=/usr/local/jemalloc/lib

1

makeMALLOC=/usr/local/jemalloc/lib

当Redis进程跑起来之后,在你的实例中使用info命令可以查看你所使用的内存管理器。

mem_allocator:jemalloc-4.2.1

1

mem_allocator:jemalloc-4.2.1

如果你使用的是libc,那么mem_allocator的参数就会是libc。

如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值