Redis手動編譯安裝——採坑記(重點解決缺失jemalloc.h)
阿新 • • 發佈:2019-02-16
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,我個人是不喜歡的,性格使然,做技術就應該不能妥協這種問題,即使只是這樣一點點的調優。最後放上測試成功的圖: