Redis手动编译安装——采坑记(重点解决缺失jemalloc.h)

Redis-4.0.10手动编译安装——采坑记(重点解决缺失jemalloc.h)

一、前期准备

mkdir /app
yum install -y gcc wget
wget http://download.redis.io/releases/redis4.0.10.tar.gz
tar zxvf redis-4.0.10.tar.gz -C /app/
cd redis-4.0.10

二、编译过程,采坑记

make
第1个报错:zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory

网上大部分的答案可能就是这样:

使用make MALLOC=libc
这种不明所以的答案我是不认可的,既然官网默认使用jemalloc,自然有它的道理和好处,ReadMe里也写了,它比libc在碎片化问题中有更少的问题。所以为了图简单而使用libc我个人是不认可的。

百度没有找到答案,谷歌了一下也没发现什么方法,于是我决定自己寻找答案。那我们就看看这个jemalloc到底是啥?记住我们是程序员,上github一查就知道了。官网地址:https://github.com/jemalloc/jemalloc

那么剩下的就简单了,缺啥装啥呗:

yum install -y bzip2
wget https://github.com/jemalloc/jemalloc/releases/download/5.1.0/jemalloc-5.1.0.tar.bz2
tar jxvf ./jemalloc-5.1.0.tar.bz2
cd jemalloc-5.1.0
./configure
make
make install
第2个报错

继续make,发现再次报错:

cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
cc: error: ../deps/lua/src/liblua.a: No such file or directory
cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
解决方法:
缺少编译文件,编译一下就好了
cd /app/redis-4.0.10/deps/
make lua hiredis linenoise jemalloc
第3个报错

继续make,发现没有报错,执行make test提示缺少tcl > 8.5,老规矩缺啥补啥:

yum install -y tcl
make test
第4个报错

好吧,是不是我人品太差了,make test的测试用例过不了,最后我把问题锁定在这里,大概意思是时区有问题:

make[1]: warning:  Clock skew detected.  Your build may be incomplete.

看了看确实时区不对,解决办法,改时区呗:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
make test
# 仍然报同样的错误,我怀疑可能是文件解压导致的时区错乱问题
rm -rf /app/redis
tar zxvf redis-4.0.10.tar.gz -C /app/
make成功
make test成功

总结

至此大工告成,总结一下遇到的问题,都不是问题,多观察多思考多百度即可解决。至于是否要将jemalloc修改为libc,我个人是不喜欢的,性格使然,做技术就应该不能妥协这种问题,即使只是这样一点点的调优。最后放上测试成功的图:
Redis手动编译安装——采坑记(重点解决缺失jemalloc.h)_第1张图片

你可能感兴趣的:(Linux,Redis,中间件)