[ redis ] 安裝redis 3.2.4遇到的雷 與 額外的設定on Ubuntu
byobu, 安裝 sudo apt-get install byobu
如果要每次透過文字介面登入時都自動啟動byobu,請輸入byobu-enable
這次為了要使用redis當作cache
所以馬上抓了一台ec2來裝
至於為什麼不用Amazon Elasticache ?
因為我們需要處理geo query
這個feature從3.2.0才出現..
Amazon Elasticache只有2.8
所以只能含淚跳過了Orz
進入正題
################################################################
完美安裝 redis的方法
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04
################################################################
首先先去 redis.io 上面下載stable版本的tar.gz檔
( cmd中使用 wget http://download.redis.io/releases/redis-3.2.4.tar.gz )
接著解壓縮
tar zxfv redis-3.2.4.tar.gz
然後進去解出來的目錄中
cd redis-3.2.4
然後直接make ... 不一定會出問題
不過我用Ubuntu 14.04 LTS 真的踩了一堆雷
( 記得先把make, gcc裝一裝 )
第一個遇到的問題
jemalloc/jemalloc.h: No such file or directory
這個是什麼問題 ?!
答案請看README.md
說關於分配器allocator, 如果有MALLOC 這個環境變量
會有用這個環境變量的去建立Redis。
而且libc 並不是默認的分配器, 默認的是jemalloc,
因為jemalloc 被證明有更少的 fragmentation problems 比libc。
但是如果你又沒有jemalloc 而只有libc 當然make 出錯。所以加這麼一個參數。
所以要輸入 make MALLOC=libc
嗚嗚.. 不過我後來還是把jemalloc給裝下去了XD
再來遇到一個卡關很久的問題
只能說我真的太嫩了 很少自己make
所以接下來跑到最後就跑出
undefined reference to dladdr
查了很多都跟我說少了什麼 -ldl
我真的不知道那是啥QQ
有知道的麻煩在底下教我拜託Orz
後來輾轉查到 ldflags=-ldl
不過加了根本沒用啊(翻桌
後再仔細的看README.md
才知道...
要靠這個
make distclean
sudo apt-get install libc6-dev-i386
github上原文
Fixing problems building 32 bit binaries
If after building Redis with a 32 bit target you need to rebuild it with a 64 bit target, or the other way around, you need to perform a
make distclean
in the root directory of the Redis distribution.
In case of build errors when trying to build a 32 bit binary of Redis, try the following steps:
- Install the packages libc6-dev-i386 (also try g++-multilib).
- Try using the following command line instead of
make 32bit
:make CFLAGS="-m32 -march=native" LDFLAGS="-m32"
然後 make 才成功
接著 make install
大功告成
Google了一堆..結果最後還是在README.md中找到解決方法!
特別以此文紀念一下Orz
####################################
感覺安裝這個 在make時會少走很多冤枉路..
sudo apt-get install build-essential tcl
####################################
redis server會說要使用
echo never >/sys/kernel/mm/transparent_hugepage/enabled
不過在ubuntu 14.04會出現 Permission Denied
所以有兩個解決方法
1.
切換成root的身份輸入上面的指令
echo never >/sys/kernel/mm/transparent_hugepage/enabled
不過這個指令再重開機後就會失效,所以推薦第二個
2.
額外設定
sudo vi /etc/sysctl.conf
然後在裡面寫入底下兩行
vm.overcommit_memory = 1
kernel/mm/transparent_hugepage/enabled = never
redis server會說要使用
echo never >/sys/kernel/mm/transparent_hugepage/enabled
不過在ubuntu 14.04會出現 Permission Denied
所以有兩個解決方法
1.
切換成root的身份輸入上面的指令
echo never >/sys/kernel/mm/transparent_hugepage/enabled
不過這個指令再重開機後就會失效,所以推薦第二個
2.
寫入 /etc/rc.local
sudo vi /etc/rc.local
加入這段
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
接著重開機即可完成!
留言
張貼留言