首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

memcache小结

2012-06-26 
memcache总结memcache总结-一灯系列原理:内存页Pages分成相同的slab,默认是1M,然后slab在分成不同slab cla

memcache总结

memcache总结-一灯系列
原理:
内存页Pages分成相同的slab,默认是1M,然后slab在分成不同slab class,然后slab class
分解成chunk,chunk存储数据。其中slab 1M可以分成多slab class,然后每个slab class中的chunk内存片大小都一样。
所以这就限制了如果你要存储value 不要超过1M。

存储的时候,如果第一次存储80byte的文件,slab 分配一个slab class,然后slab class中分成多个chunk 每个都是80byte
如果第二次再来的80byte的value那么就存入到这个slab class中的任意一个chunk中,如果不是80byte那么,就会安装1.25倍往上乘
直到能容纳该文件的最接近的大小。

经验技巧:
stats
查看memcached状态的基本命令,通过这个命令可以看到如下信息:
STAT pid 22459???????????????????????????? 进程ID
STAT uptime 1027046??????????????????????? 服务器运行秒数
STAT time 1273043062?????????????????????? 服务器当前unix时间戳
STAT version 1.4.4???????????????????????? 服务器版本
STAT pointer_size 64?????????????????????? 操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.040000????????????????? 进程累计用户时间
STAT rusage_system 0.260000??????????????? 进程累计系统时间
STAT curr_connections 10?????????????????? 当前打开连接数
STAT total_connections 82????????????????? 曾打开的连接总数
STAT connection_structures 13????????????? 服务器分配的连接结构数
STAT cmd_get 54??????????????????????????? 执行get命令总数
STAT cmd_set 34??????????????????????????? 执行set命令总数
STAT cmd_flush 3?????????????????????????? 指向flush_all命令总数
STAT get_hits 9??????????????????????????? get命中次数
STAT get_misses 45???????????????????????? get未命中次数
STAT delete_misses 5?????????????????????? delete未命中次数
STAT delete_hits 1???????????????????????? delete命中次数
STAT incr_misses 0???????????????????????? incr未命中次数
STAT incr_hits 0?????????????????????????? incr命中次数
STAT decr_misses 0???????????????????????? decr未命中次数
STAT decr_hits 0?????????????????????????? decr命中次数
STAT cas_misses 0????? ????? cas未命中次数
STAT cas_hits 0??????????????????????????? cas命中次数
STAT cas_badval 0????????????????????????? 使用擦拭次数
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 15785????????????????????? 读取字节总数
STAT bytes_written 15222?????????????????? 写入字节总数
STAT limit_maxbytes 1048576??????????????? 分配的内存数(字节)
STAT accepting_conns 1???????????????????? 目前接受的链接数
STAT listen_disabled_num 0????????????????
STAT threads 4???????????????????????????? 线程数
STAT conn_yields 0
STAT bytes 0?????????????????????????????? 存储item字节数
STAT curr_items 0????????????????????????? item个数
STAT total_items 34??????????????????????? item总数
STAT evictions 0?????????????????????????? 为获取空间删除item的总数

清单 8. 计算缓存命中率
现在,用 get_hits 的数值除以 cmd_gets。在本例中,您的命中率大约是 71%。
在理想情况下,您可能希望得到更高的百分比 — 比率越高越好。
查看统计数据并不时测量它们可以很好地判定缓存策略的效率。

很可能memcached内存不够用,导致新增一条新数据,就丢失一条老的。
设计的时候也需要动静分离,以提高命中率。


stats items
输出各个slab中的item信息。s
stats slabs
输出slab中更详细的item信息
stats sizes
输出所有item的大小和个数

stats cachedump <slab_id> <limit_num>

?


//有一个查看监控memcache的php页面memecache.php 可以监控memecahe的命中率

1.memcache server端安装配置
yum install gcc* make* php-devel zlib-devel
mkdir -p /application/memcache
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

2.先安装libevent:
tar zxvf libevent-1.2.tar.gz
cd libevent-1.2
./configure --prefix=/usr
make
make install

ln -s /usr/lib/libevent-1.2.so.1.0.3 /usr/lib64/libevent-1.2.so.1

3.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3


4.安装memcached,同时需要安装中指定libevent的安装位置:
tar zxvf memcached-1.2.0.tar.gz
cd memcached-1.2.0
./configure --with-libevent=/usr
make
make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。

(注:安装的时候出现错误:

1 linux警告:检测到时钟错误。您的创建可能是不完整的

解决方法:

修改当前时间:

[root]#date –s ‘2010/11/5 8:01:00 ‘

将当前系统时间写入CMOS中去
#clock –w

)
安装完成后会把memcached放到 /usr/local/bin/memcached ,

5.测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

安装Memcache的PHP扩展
1.在http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。
2.安装PHP的memcache扩展
wget http://pecl.php.net/get/memcache-2.2.1.tgz
tar vxzf memcache-2.2.1.tgz
cd memcache-2.2.1
/usr/local/php/bin/phpize
./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
make
make install

以上安装时候错误解决:
1 phpize没有找到
解决方法: centos是默认没有安装php-devel的
yum install php-devel

2 make: *** [memcache.lo] Error 1
没有安装zlib
yum install zlib-devel

?

3.上述安装完后会有类似这样的提示:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/

4.把php.ini中的extension_dir = “./”修改为

extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/”

5.添加一行来载入memcache扩展:extension=memcache.so

memcached的基本设置:
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid


-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,可以不指定ip不使用该参数? /usr/local/bin/memcached -p 11117 -u nobody -m 600m -d
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
-M不使用LRU算法,该参数最好不要用


(注:
出现错误:/usr/local/bin/memcached: error while loading shared libraries: libevent-1.3.so.1: cannot open shared object file: No such file or directory
直接设置链接
#ln -s /usr/local/libevent/lib/libevent-1.3.so.1 /lib64/libevent-1.3.so.1
)

2.如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`
也可以启动多个守护进程,不过端口不能重复。

3.重启apache,service httpd restart
Memcache环境测试:
运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始领略Memcache的魅力把!
<?php
$mem = new Memcache;
$mem->connect("192.168.0.200", 12000);
$mem->set('key', 'This is a test!', 0,60);
$val = $mem->get('key');
echo $val;
?>

?

或者使用shell
echo "stats"|nc localhost port

本文出自 “一灯” 博客,请务必保留此出处http://yidengdashi.blog.51cto.com/1125400/663540

热点排行