主機環境: CentOS 6.6 x86_64
一,安裝memcached
1,由于memcached依賴libevent 庫,用它做Socket的處理,是以,我們需要安裝libevent庫,我這裡就用yum來安裝了.
2,到官網下載下傳memcached 的源碼包. http://memcached.org
最新版是 v1.4.24
編譯安裝
但是有報錯
沒有找到libevent庫檔案
發現是安裝到/usr/lib64 目錄下的.
3,繼續安裝,,,,, 繼續報錯,, 算了,我們直接編譯安裝最新版 libevent 吧
libevent的官網是 http://libevent.org/
直接下載下傳最新的
4,繼續安裝memcached
5,安裝完成後 試運作下memcached 看有無報錯
來看下安裝後,的目錄樹
檔案很少,可執行程式隻有bin目錄下的 memcached 一個,是以隻能通過它來啟動memcached服務.我們來看下memcached 指令的用法. 使用memcached -h 檢視.
6, memcached參數詳解
-p: 指定tcp協定的監聽端口,預設11211
-U: 指定UDP協定的監聽端口,預設也是11211
-s: 指定unix套接字路徑,使用unix套接字來監聽.
-a: 設定套接字的掩碼.格式為八進制,預設0700
-l: 指定監聽的網絡位址.預設為0.0.0.0
-d: 将memcached作為守護程序,在背景運作.
-r: 核心檔案的最大值限制.
-u: 指定memcached的運作身份.
-m: 指定用于存儲緩存條目的最大記憶體值,機關為 MB (預設64MB)
-M: 始終不删除過期的舊資料,而是在記憶體耗盡過後直接報錯.
-c: 限制同時的最大連接配接數.(預設 1024)
-k: 鎖定所有分頁記憶體.
注意:這裡是一個限制值,限制了你可以鎖定多少記憶體,如果配置設定了超過限定值的操作,将會失敗.是以要針對啟動memcached的使用者程序正确的限制,而不是-u參數指定使用者運作,在sh下,這個操作也可以使用 ulimit -S -l NUM_KB 來完成.對于一個大的緩存來說,這個有點危險,是以檢視README文檔和memcached首頁去檢視有關他的配置建議.
-v: 詳細模式
-vv: 更詳細,,
-vvv: 最詳細,,
-h: 幫助資訊.
-i: 列印memcached 和 libevent許可.
-P: 儲存PID檔案的路徑及檔案名,該參數隻有在使用-d選項後才生效.
-f: 設定塊(chunk)大小的增長因子,預設1.25
-n: 指定配置設定給key value flags 的最小空間. 預設48
-L: 盡量使用大記憶體頁(如果有效的前提下).增加記憶體頁的大小能夠減少TLB失誤數,并且能提高性能.為了能夠從作業系統擷取大的記憶體頁,memcached将會配置設定所有的緩存條目到一個大的快(chunk)中.這種機制與所使用的作業系統有關,隻有你的作業系統支援才有效.
-D: 使用<char>作為key字首 和 ID的分隔符,用在狀态報告中,預設的<char>是冒号 : ,如果使用該參數指定了分隔符,那麼在狀态收集中會自動打開,如果沒有設定,那麼需要向伺服器發送 stats detail on 指令才會打開.
-t: 使用的線程數. 預設為4
-R: 通過該參數來設定一個限制值,定義每一個事件(event)請求的最大值,以便保護能夠處理完成一個單獨的用戶端請求,一旦一個連接配接超過了這個值,那麼memcached将會試圖通過其他的連接配接來處理I/O.它的預設值為20
-C: 禁用CAS
-b: 設定等待(積壓)隊列的限制,預設1024
-B: 設定綁定的協定 --可選的有ascii,binary 或 auto(預設).
-I: 設定每一個塊(slab)頁的大小,預設的大小為1MB,最小為1KB,最大為128MB,調整這個值能夠改變對緩存條目大小的限制.當心這個操作同樣會增加slab的數目(使用-v來檢視),并且會使用memcached的所有記憶體.
7,啟動memcached
下面是啟動memcached的兩種方式.
第一種:
第二種方式:
以下是輸出内容:
slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 120 perslab 8738
slab class 3: chunk size 152 perslab 6898
.....
slab class 40: chunk size 616944 perslab 1
slab class 41: chunk size 771184 perslab 1
slab class 42: chunk size 1048576 perslab 1
<26 server listening (auto-negotiate)
<27 send buffer was 124928, now 268435456
<28 server listening (udp)
<30 server listening (udp)
<29 server listening (udp)
<27 server listening (udp)
分析如下:
這裡的slab就是相當于memcached提供的緩存,memcached伺服器堆記憶體的配置設定機關就是slab,一個slab大小在預設情況下是1MB,而每一個slab又被分為若幹個chunk,就像對磁盤或記憶體的使用一樣一層一層的分割直到最小機關,而這裡chunk就是最小的機關了,然後在這些chunk中保持我們緩存的條目 item,而chunk的大小也就完全一樣了,是以,對于一個位元組或者十個位元組可能使用的chunk數目是一樣多的,也就是說最少也存在着浪費.
還有一點需要說明的是,在每一個chunk中除了儲存緩存條目的值(value)以外, 還有結構體, key .
圖中chunk的增長大小就是因為有預設 -f 1.25的增長因子作用.
添加memcached可執行程式的軟連接配接到系統PATH目錄下
8,memcached的其他工具
在memcached的源碼包中有一個scripts目錄, 裡面由一些自帶的腳本和工具.
8.1, damemtop
該工具使用perl子產品,如果以前沒有安裝過這些子產品,那麼隻有安裝過後才可以使用.
8.1.1, 安裝perl相關子產品
下面是AnyEvent YAML TermReadKey 三個子產品的安裝.
# ./damemtop
YAML Error: Couldn't open /etc/damemtop.yaml for input:\n
Code: YAML_LOAD_ERR_FILE_INPUT
at ./damemtop line 543
運作腳本報錯,, 提示需要/etc/damemtop.yaml 檔案
那麼可以吧scripts 目錄下的 damemtop.yaml 複制到 /etc/ 目錄下
分析配置檔案 damemtop.yaml
這個檔案的格式采用了YAML(是YAML Ain't a Markup Language的縮寫).下面看一看配置檔案内容:
做好必要的配置後,就可直接運作 damemtop 了
如圖:
8.2 memcached-sysv服務腳本
顧名思義,該檔案是個系統服務腳本.
檢視服務腳本,由于我們的memcached是源碼定制安裝,是以需要注意腳本中的黑色字型部分,
#! /bin/sh
#
# chkconfig: - 55 45
# description: The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached
# Source function library.
. /etc/rc.d/init.d/functions
PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=64
OPTIONS=""
if [ -f /etc/sysconfig/memcached ];then
. /etc/sysconfig/memcached
fi
# Check that networking is up.
if [ "$NETWORKING" = "no" ]
then
exit 0
RETVAL=0
prog="memcached"
start () {
echo -n $"Starting $prog: "
# insure that /var/run/memcached has proper permissions
chown $USER /var/run/memcached
daemon memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
echo -n $"Stopping $prog: "
killproc memcached
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/memcached
rm -f /var/run/memcached.pid
fi
restart () {
stop
start
# See how we were called.
case "$1" in
start)
start
;;
stop)
;;
status)
status memcached
restart|reload)
restart
condrestart)
[ -f /var/lock/subsys/memcached ] && restart || :
*)
echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
exit 1
esac
exit $?
當然如配置檔案所示,響應的參數可以單獨寫到 /etc/sysconfig/memcached 檔案中,這樣memcached的配置檔案結構更清晰.
8.3, memcached-tool
memcached-tool 是基于perl 的腳本,使用前務必确認已經安裝好perl
執行沒有參數的腳本後,會給出使用示例.
六種格式: (1.4.5版本之前隻有四種格式,新版新增了 settings 和 sizes ,而且提示資訊也明确說明了sizes指令是一個開發人員選項,實際生産環境并不推薦使用)
格式1: memcached-tool ip:port display
格式2: memcached-tool ip:port
這種方式同 格式1 是一種預設方式,它的預設參數為display
格式3: memcached-tool ip:port stats
限制詳細資訊,比如memcached版本号,程序pid号,libevent版本号,線程數,寫入計數,錯誤計數,總連接配接數,目前連接配接數,,,,,,
格式4: memcached-tool ip:port dump
dump參數會将記憶體中現有的緩存對象即 鍵-值 轉存出來.
例如: memcached-tool 127.0.0.1:11211 dump > memcached.txt
9 檢視memcached服務的運作情況
telnet到memcached伺服器後有很多的指令可以使用,如 add get set incr decr replace delete 等,, 除此之外還有一系列的擷取伺服器資訊的指令,這部分指令都是以stats開頭的.
memcached提供了許多指令,可以通過telnet工具來執行,當然你也可以使用PHP提供的Memcached::getStats($cmd) 來執行.
使用telnet 指令