读书人

memcached 札记

发布时间: 2012-06-28 15:20:03 作者: rapoo

memcached 笔记

安装就不用记了,都会,记点有用的。

?

参数:?

?启动方式: ?-d ? 以守护程序(daemon)方式运行 ?-u root ? 指定用户,如果当前为 root ,需要使用此参数指定用户 ?-P /tmp/a.pid? 保存PID到指定文件 ?内存设置: ?-m 1024 ? 数据内存数量,不包含memcached本身占用,单位为 MB ?-M ? 内存不够时禁止LRU,报错 ?-n 48? 初始chunk=key+suffix+value+32结构体,默认48字节 ?-f 1.25 ? 增长因子,默认1.25 ?-L? 启用大内存页,可以降低内存浪费,改进性能 ?连接设置: ?-l 127.0.0.1 ? 监听的 IP 地址,本机可以不设置此参数 ?-p 11211 ? TCP端口,默认为11211,可以不设置 ?-U 11211? UDP端口,默认为11211,0为关闭 ?并发设置: ?-c 1024? 最大并发连接数,默认1024,最好是200 ?-t 4? 线程数,默认4。由于memcached采用NIO,所以更多线程没有太多作用 ?-R 20? 每个event连接最大并发数,默认20 ?-C? 禁用CAS命令(可以禁止版本计数,减少开销)

?

###############################################

memcached有可能会死掉(mixi.jp经验)
监视memcached进程并自动启动
启动脚本样例:run.sh

#!/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

?

###############################################

命令列表

存储命令set/add/replace/append/prepend/cas
读取命令get=bget?/gets
删除命令delete
计数命令incr/decr
统计命令stats/settings/items/sizes/slabs
工具memcached-tool

###############################################

?

????? memcached在启动时指定 Growth Factor因子(通过-f选项),就可以在某种程度上控制slab之间的差异。
默认值为1.25。但是,在该选项出现之前,这个因子曾经固定为2,称为“powers of 2”策略。
让我们用以前的设置,以verbose模式启动memcached试试看:


liangc@ubuntu:/app/c$ memcached -f 2 -vv
slab class?? 1: chunk size??????? 80 perslab?? 13107
slab class?? 2: chunk size?????? 160 perslab??? 6553
slab class?? 3: chunk size?????? 320 perslab??? 3276

?

liangc@ubuntu:/app/c$ memcached -f 1.2 -vv
slab class?? 1: chunk size??????? 80 perslab?? 13107
slab class?? 2: chunk size??????? 96 perslab?? 10922
slab class?? 3: chunk size?????? 120 perslab??? 8738

????? 可见,组间差距比因子为2时小得多,更适合缓存几百字节的记录。从上面的输出结果来看,可能会觉得
有些计算误差,这些误差是为了保持字节数的对齐而故意设置的。

?

#################################################

#启动服务 mc-start.sh

#memcached d m 100? -l 127.0.0.1 -p 11211 -P /log/memcached/11211.pid

?

ip="192.168.137.2"
ports=(11211 11212 11213 11214)
mem=100

len=${#ports[*]}

i=0
while [ $i -lt $len ]; do
?rm -rf $logpath/${ports[$i]}.pid
?memcached m $mem -l $ip -p ${ports[$i]} -d
?echo service $i --">" $ip":"${ports[$i]}
?let i++
done

?

#关闭服务

ps -ax |grep memcached|awk '{print $1}'|xargs kill -9

?

?

###########################################

常用启动 :?

./memcached ?m 512 -L -u 非root用户 -n 128 -c 2048 -t 10 -R 100 -C -l 159.226.83.252 -p 11211 -d

###########################################

查看运行状态 : watch "echo stats | nc 127.0.0.1 11211"

?

这里显示了很多状态信息,下边详细解释每个状态项:
1.? pid: memcached服务进程的进程ID
2.? uptime: memcached服务从启动到当前所经过的时间,单位是秒。
3.? time: memcached服务器所在主机当前系统的时间,单位是秒。
4.? version: memcached组件的版本。这里是我当前使用的1.2.6。
5.? pointer_size:服务器所在主机操作系统的指针大小,一般为32或64.
6.? curr_items:表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
7.? total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
8.? bytes:表示系统存储缓存对象所使用的存储空间,单位为字节。
9.? curr_connections:表示当前系统打开的连接数。
10. total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数。
11. connection_structures:表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
12. cmd_get:累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
13. cmd_set:累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
14. get_hits:表示获取数据成功的次数。
15. get_misses:表示获取数据失败的次数。
16. evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
17. bytes_read:memcached服务器从网络读取的总的字节数。
18. bytes_written:memcached服务器发送到网络的总的字节数。
19. limit_maxbytes:memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
20. threads:被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
总结:stats命令总体来说很有用,通过这个命令我们很清楚当前memcached服务的各方面的信息。除此之外,我还没有其他方法可以知道这些状态信息。可能还有其他途径,可能我对memcached组件还不太熟悉吧。

?

读书人网 >开源软件

热点推荐