1. 程式人生 > >Redis手動編譯安裝——採坑記(重點解決缺失jemalloc.h)

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測試成功