8. 安装基于libevent事件处理机制 http://www.monkey.org/~provos/libevent/
./configure --prefix=/usr/local
make
sudo make install
memcached: http://memcached.org/
./configure --with-libevent=/usr/local
make
make install
11. daemontools启动工具memcached有可能会死掉(mixi.jp经验)
监视memcached进程并自动启动
启动脚本样例:run.sh参考:http://cr.yp.to/daemontools.html#!/bin/sh
if [ f /etc/sysconfig/memcached ];then
. /etc/sysconfig/memcached
fi
exec 2>&1
exec memcached p $PORT u $USER m $CACHESIZE c $MAXCONN $OPTIONS
12. memcached调试-v +输出error/warning
-vv +输出命令/响应
-vvv +输出内部状态[@10_10_82_80 ~]# memcached -d -u root -m 1024 -p 11210 -vvv
[@10_10_82_80 ~]# memcached -d -u root -m 1024 -p 11211 –vvv
slab class 1: chunk size 96 perslab 10922
slab class 2: chunk size 120 perslab 8738
......
slab class 42: chunk size 1048576 perslab 1
<36 server listening (auto-negotiate)
<37 send buffer was 126976, now 268435456
<37 server listening (udp)
<37 server listening (udp)
<37 server listening (udp)
<37 server listening (udp)
<38 new auto-negotiating client connection
38: Client using the ascii protocol
<38 stats
<38 get abc
>38 END
<38 quit
<38 connection closed.telnet localhost 11210/11211
stats
get abc
quit
15. 存储命令set/add/replaceset liu 32 0 4
java
STORED//正确
get liu
VALUE abc 32 4
java
END
set liu 32 0 4
cplus
CLIENT_ERROR bad data chunk
ERROR//长度错误set liu 32 0 4
java
STORED
add liu 32 0 5
cplus
NOT_STORED
//已存在不能add
get liu
VALUE abc 32 4
java
END
add song 32 0 5
cplus
STORED
//不存在可以addset liu 32 0 4
java
STORED
replace liu 32 0 5
cplus
STORED
//已存在可以replace
get liu
VALUE cplus 32 5
liu
END
replace yang 32 0 5
cplus
NOT_STORED
//不存在不能replacedatablock长度必须正确add只能添加不存在的keyreplace只能替换已有的key
16. 读取命令get/getsget liu song yang
VALUE liu 32 4
java
VALUE song 32 5
cplus
END
//查询多个键值gets liu
VALUE liu 32 4 12
java
END
//取得版本号
replace liu 32 0 4
java
STORED
//增加版本号
get liu
VALUE liu 32 4
java
END
gets liu
VALUE liu 32 4 13
java
END格式:
*\r\n
VALUE []\r\n
\r\n
…
VALUE []\r\n
\r\n
END\r\n
command: get普通查询,gets用于查询带版本的值版本号+1
17. 检查存储命令cascas即check and set,只有版本号相匹配时才能存储,否则返回EXISTS
设计意图:解决多客户端并发修改同一条记录的问题,防止使用经过改变了的value/key对cas liu 32 0 5 12
cplus
EXISTS
gets liu
VALUE liu 32 4 13
java
END//版本号不同不修改
cas liu 32 0 5 13
cplus
STORED
gets liu
VALUE liu 32 5 14
cplus
END//版本号相同才修改当前版本号为13,按12不能修改当前版本号为13,按13可以修改
20. 统计命令statsstats
STAT pid 23178
STAT uptime 1039318
STAT time 1292036037
STAT version 1.4.2
STAT pointer_size 64
STAT rusage_user 1011.574217
STAT rusage_system 1677.713948
STAT curr_connections 114
STAT total_connections 73801
STAT connection_structures 149
STAT cmd_get 79114939
STAT cmd_set 27302514
STAT cmd_flush 0
STAT get_hits 79114939
STAT get_misses 24322507
STAT delete_misses 133928
STAT delete_hits 402569
STAT incr_misses 0
STAT incr_hits 0STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 59348603658
STAT bytes_written 425549797158
STAT limit_maxbytes 4294967296
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 3832761746
STAT curr_items 2854731
STAT total_items 27302514
STAT evictions 18456987
STAT reclaimed 0
END格式:
stats []\r\n
STAT \r\n
END\r\n
22. stats settings查看设置stats settings
STAT maxbytes 0
STAT maxconns 1024
STAT tcpport 11213
STAT udpport 11211
STAT inter NULL
STAT verbosity 0
STAT oldest 0
STAT evictions on
STAT domain_socket NULL
STAT umask 700
STAT growth_factor 1.25
STAT chunk_size 48
STAT num_threads 4
STAT stat_key_prefix :
STAT detail_enabled no
STAT reqs_per_event 20
STAT cas_enabled yes
STAT tcp_backlog 1024
STAT binding_protocol auto-negotiate
STAT item_size_max 1048576
END名称描述maxbytes最大字节数限制,0无限制maxconns允许最大连接数tcpportTCP端口udpportUDP端口interverbosity日志0=none,1=som,2=lotsoldest最老对象过期时间evictionson/off,是否禁用LRUdomain_socketsocket的domainumask创建Socket时的umaskgrowth_factor增长因子chunk_sizekey+value+flags大小num_threads线程数,可以通过-t设置,默认4stat_key_prefixstats分隔符detail_enabledyes/no,显示stats细节信息reqs_per_event最大IO吞吐量(每event)cas_enabledyes/no,是否启用CAS,-C禁用tcp_backlogTCP监控日志auth_enabled_saslyes/no,是否启用SASL验证
23. stats items数据项统计stats items
STAT items:1:number 10922
STAT items:1:age 350988
STAT items:1:evicted 3829
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 690209
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:2:number 375734
STAT items:2:age 898762
STAT items:2:evicted 2661399
STAT items:2:evicted_nonzero 0
STAT items:2:evicted_time 142500
STAT items:2:outofmemory 0
STAT items:2:tailrepairs 0
...
STAT items:40:number 14
STAT items:40:age 977359
STAT items:40:evicted 25
STAT items:40:evicted_nonzero 0
STAT items:40:evicted_time 60653
STAT items:40:outofmemory 0
STAT items:40:tailrepairs 0
END名称描述number该slab中对象数,不包含过期对象ageLRU队列中最老对象的过期时间evictedLRU释放对象数evicted_nonzero设置了非0时间的LRU释放对象数evicted_time最后一次LRU秒数,监控频率outofmemory不能存储对象次数,使用-M会报错tailrepairs修复slabs次数reclaimed使用过期对象空间存储对象次数
24. stats sizes对象数量统计stats sizes
STAT 96 10922
STAT 128 375734
STAT 160 200416
STAT 192 816311
STAT 224 8685
STAT 256 3321
STAT 288 3549
STAT 320 826
STAT 352 427END格式:STAT
注意:会锁定服务,暂停处理请求
25. stats slabs区块统计stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
...
STAT 40:chunk_size 1048576
STAT 40:chunks_per_page 1
STAT 40:total_pages 15
STAT 40:total_chunks 15
STAT 40:used_chunks 14
STAT 40:free_chunks 1
STAT 40:free_chunks_end 0
STAT 40:mem_requested 9348752
STAT 40:get_hits 9593
STAT 40:cmd_set 4828
STAT 40:delete_hits 40
STAT 40:incr_hits 0
STAT 40:decr_hits 0
STAT 40:cas_hits 0
STAT 40:cas_badval 0
STAT active_slabs 40
STAT total_malloced 4294496616
END名称描述chunk_sizechunk大小,bytechunks_per_page每个page的chunk数量total_pagespage数量total_chunkschunk数量*page数量get_hitsget命中数cmd_setset数delete_hitsdelete命中数incr_hitsincr命中数decr_hitsdecr命中数cas_hitscas命中数cas_badvalcas数据类型错误数used_chunks已被分配的chunk数free_chunks剩余chunk数free_chunks_end分完page浪费chunk数mem_requested请求存储的字节数active_slabsslab数量total_malloced总内存数量区块数量命
中
率分析占用情况被浪费内存数=(total_chunks * chunk_size) - mem_requested
如果太大,需要调整factor
26. 其他命令version
flush_all
quit
echo/nc快捷方式[@10_10_82_80 ~]# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
version
VERSION 1.4.5
flush_all
OK
quit
Connection closed by foreign host.
You have new mail in /var/spool/mail/root
[@10_10_82_80 ~]# echo flush_all | nc localhost 11211
OK
[@10_10_82_80 ~]# echo get liu | nc localhost 11210
VALUE liu 32 4
java
END
28. memcached-toolmemcached-tool 192.168.12.195:11213
# Item_Size Max_age 1MB_pages Count Full?
1 96 B 384295 s 1 10922 yes
2 120 B 964793 s 43 375734 yes
3 152 B 196 s 1 1021 no
4 192 B 962720 s 186 1015746 yes
5 240 B 954705 s 2 8734 yes
6 304 B 945823 s 2 6898 yes
7 384 B 954218 s 9 24569 yes
8 480 B 980911 s 91 198744 yes
9 600 B 963930 s 104 181688 yes
10 752 B 964602 s 274 381956 yes
11 944 B 963902 s 173 192030 yes
12 1.2 kB 962169 s 79 69914 yes
13 1.4 kB 959572 s 67 47436 yes
14 1.8 kB 957541 s 69 38916 yes
15 2.3 kB 956767 s 75 33825 yes
16 2.8 kB 957198 s 105 37904 yes
17 3.5 kB 957049 s 128 36864 yes
18 4.4 kB 955935 s 129 29669 yes
19 5.5 kB 956721 s 111 20423 yes 20 6.9 kB 954862 s 119 17492 yes
21 8.7 kB 953024 s 157 18526 yes
22 10.8 kB 953361 s 226 21243 yes
23 13.6 kB 953301 s 315 23625 yes
24 16.9 kB 958310 s 356 21360 yes
25 21.2 kB 961544 s 330 15839 yes
26 26.5 kB 961128 s 259 9840 yes 27 33.1 kB 962389 s 181 5430 yes
28 41.4 kB 966056 s 141 3384 yes
29 51.7 kB 966694 s 111 2109 yes
30 64.7 kB 965340 s 87 1305 yes
31 80.9 kB 962627 s 65 779 yes
32 101.1 kB 965821 s 38 379 yes
33 126.3 kB 949182 s 25 200 yes
34 157.9 kB 965799 s 18 107 yes
35 197.4 kB 876687 s 11 54 yes
36 246.8 kB 938290 s 9 36 yes
37 308.5 kB 837011 s 8 22 yes
38 385.6 kB 886180 s 14 27 yes
39 482.0 kB 908224 s 6 10 yes
40 1024.0 kB 990279 s 15 14 yes
29. UDP协议何时使用UDP?
TCP连接客户端过多时选用
允许少量的操作失败
如get有少量丢失,可以当做没被cache处理
frame header: 8byte + tcppacket
0-1 Request ID
2-3 Sequence number
4-5 Total number of datagrams in this message
6-7 Reserved for future use; must be 0