Memcached 源码安装 与 配置

主机环境: CentOS 6.6 x86_64

一,安装memcached

1,由于memcached依赖libevent 库,用它做Socket的处理,因此,我们需要安装libevent库,我这里就用yum来安装了.

yum install libevent

2,到官网下载memcached 的源码包.   http://memcached.org

最新版是 v1.4.24

#wget 
#tar xf   memcached-1.4.24.tar.gz 
#cd memcached-1.4.24

编译安装

# yum install cyrus-sasl-devel.x86_64   
# ./configure  --prefix=/usr/local/memcached_1.4.24 --enable-sasl

但是有报错

没有找到libevent库文件

# rpm -ql libevent

发现是安装到/usr/lib64 目录下的.

3,继续安装,,,,,   继续报错,, 算了,我们直接编译安装最新版 libevent 吧

libevent的官网是 http://libevent.org/

直接下载最新的

 # wget 
 # tar xf libevent-2.0.22-stable.tar.gz 
 # cd libevent-2.0.22-stable
 # ./configure --prefix=/usr/local/libevent_2.0.22
 # make && make install

4,继续安装memcached

# ./configure  --prefix=/usr/local/memcached_1.4.24 --enable-sasl --with-libevent=/usr/local/libevent_2.0.22/
# make && make install

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的两种方式.

第一种:

# ./memcached -u memcached -p 11211 -m 64m -vv

第二种方式:

# ./memcached -d -m 10 -u memcached -l 127.0.0.1 -p 11211 -c 50 -P /tmp/memcached.pid -vv

以下是输出内容:

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目录下

ln -s /usr/local/memcached_1.4.24/bin/memcached /usr/bin/

8,memcached的其他工具

在memcached的源码包中有一个scripts目录, 里面由一些自带的脚本和工具.

8.1, damemtop

该工具使用perl模块,如果以前没有安装过这些模块,那么只有安装过后才可以使用.

8.1.1, 安装perl相关模块

下面是AnyEvent  YAML   TermReadKey 三个模块的安装.

# yum install perl perl-TermReadKey perl-YAML.noarch  -y

# ./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服务脚本

顾名思义,该文件是个系统服务脚本.

# cp memcached.sysv /etc/init.d/memcached
# chkconfig --add memcached

查看服务脚本,由于我们的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

fi

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

RETVAL=$?

echo

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)

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 $?

# mkdir /var/run/memcached
# chown memcached:memcached /var/run/memcached
# service memcached restart   //看能否正常重启和启动服务.

当然如配置文件所示,响应的参数可以单独写到 /etc/sysconfig/memcached 文件中,这样memcached的配置文件结构更清晰.

8.3,  memcached-tool

memcached-tool 是基于perl 的脚本,使用前务必确认已经安装好perl

# ./memcached-tool   //直接运行工具查看效果

执行没有参数的脚本后,会给出使用示例.

六种格式: (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 命令

[[email protected]_212 scripts]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
stats
STAT pid 23736			     //Memcached的进程pid
STAT uptime 1495                     //服务从启动到现在所经过的时间,单位是秒
STAT time 1442132353                 //服务器所在主机当前系统的时间,单位是秒
STAT version 1.4.24                  //Memcached服务器的版本
STAT libevent 2.0.22-stable          //Memcached服务器上libevent的版本
STAT pointer_size 64                 //所在主机操作系统的指针大小,一般为32或64  32位系统 64位系统
STAT rusage_user 0.018997            //进程累积使用的用户时间
STAT rusage_system 0.030995          //进程累积使用的系统时间
STAT curr_connections 10             //当前打开的连接数
STAT total_connections 36            //所有连接数
STAT connection_structures 11        //服务器分配的连接结构数
STAT reserved_fds 20                 //misc fds使用数 
STAT cmd_get 4                       //执行get命令的总数
STAT cmd_set 2                       //执行set命令的总数
STAT cmd_flush 0                     //执行flush命令的总数
STAT cmd_touch 0                     //执行touch次数,touch可以刷新过期时间
STAT get_hits 3                      //get命令的命中次数
STAT get_misses 1                    //get命令的失败次数
STAT delete_misses 0                 //delete命令的失败次数
STAT delete_hits 0                   //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 touch_hits 0                    //touch命令的命中次数
STAT touch_misses 0                  //touch命令的失败次数
STAT auth_cmds 0                     //authentication 执行的次数 
STAT auth_errors 0                   //authentication 执行失败的次数 
STAT bytes_read 698                  //服务器从网络上读取到的字节数  
STAT bytes_written 15636             //服务器从网络上写入的字节数  
STAT limit_maxbytes 67108864         //最大可用内存限制,就是在命令行中的 -m 值
STAT accepting_conns 1               //当前接受的连接数
STAT listen_disabled_num 0           //
STAT threads 4                       //最大可用的线程数
STAT conn_yields 0                   //memcached 启动至今有多少次打开的连接因为内部请求数达到 -R 参数指定的限值而被动放弃的
STAT hash_power_level 16             //hashpower的level,可以在启动的时候设置$ memcached -o hashpower=20
STAT hash_bytes 524288               //内存使用总量单位为byte 
STAT hash_is_expanding 0             //是否正在扩大hash表 
STAT malloc_fails 0                  //
STAT bytes 72                        //所有被存储条目的字节数
STAT curr_items 1                    //当前缓存的条目数
STAT total_items 2                   //缓存条目的总数
STAT expired_unfetched 0             //item过期之前没有被touch过,也就是放进去之后就没更新过过期时间的数目
STAT evicted_unfetched 0             //item替换覆盖之前没有被touch过,也就是放进去之后就没更新过过期时间的数目
STAT evictions 0                     //为了给行的数据项目释放空间,而从缓存移除的缓存对象数目
STAT reclaimed 0                     //memcached 启动至今有多少次在存储数据的时候使用了过期数据的空间
STAT crawler_reclaimed 0             //被检索器回收的数目
STAT crawler_items_checked 0         //
STAT lrutail_reflocked 0             //
END
时间: 2024-10-10 14:47:11

Memcached 源码安装 与 配置的相关文章

Mysql源码安装、配置、初始化及启动

[在此处输入文章标题] 主机环境redhat6.5 实验环境服务端 ip 172.25.29.1  mysql 安装包  mysql-boost-5.7.11.tar.gz   cmake-2.8.12.2-4.el6.x86_64.rpm 1.mysql的源码安装 1.解压压缩包 [[email protected] mnt]# tar zxfmysql-boost-5.7.11.tar.gz  #解压gz包 [[email protected] mnt]# yum installcmake-

NoSQL系列(1)——memcached源码安装使用

0. 引言 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型数据库,因为NoSQL不仅仅是指一种数据库.就像关系型数据库中有MySQL和Oracle等类型,NoSQL也有memcached.MongoDB和redis等. NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库.表(通常是多个表)以及字段.NoSQL数据可以存储在内存里,查询速度非常快,因此NoSQL数据库随

mysql-proxy源码安装及配置mysql读写分离

安装Mysql-proxy关联系统包 libevent libevent-devel glib2 glib2-devel lua 5.1.x lua-devel-5.1.x pkg-config mysql-devel openssl openssl-devel gcc* 2安装MySQL-proxy 0.8.5 下载源码包并解压 在源码包路径下安装 ./configure –prefix=/u01/mysql-proxy make make install 3.配置mysql-proxy.cn

PHP源码安装及配置——以fastCGI的方式与httpd整合

在前一篇博文中介绍了LAMP的安装及配置.这里专门介绍PHP以fastCGI的方式与httpd整合的情况下,具体如何编译及配置.而且假定httpd.mysql均如前一篇博文介绍的安装配置完毕.php也采取一样版本的源码包php-5.6.1.tar.bz2. 1.  编译安装php # tar xf php-5.6.1.tar.bz2 # cd php-5.6.1 # ./configure --prefix=/usr/local/php --enable-sockets --enable-mbs

Linux下源码安装并配置Nginx

实验环境 一台最小化安装的CentOS 7.3 虚拟机 安装nginx 安装nginx依赖包 yum install -y pcre-devel zlib-devel openssl-devel wget gcc tree vim Nginx依赖于pcre.zlib.openssl,在编译前配置时如果有问题 可以使用yum方式安装三个包(pcre-devel.zlib-devel.openssl-devel) 从Nginx官网下载Nginx源码包 wget http://nginx.org/do

Centos下Nginx源码安装与配置并附shell编程实现自动化安装

一.首先安装必要的库 nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库.选定/usr/local为安装目录,以下具体版本号根据实际改变. 1.安装PCRE库 $ cd /usr/local/ $ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz $ tar -zxvf pcre-8.36.tar.gz $ cd pcre-8.3

《一个操作系统的实现》学习笔记(一) bochs源码安装及配置

前言:本机环境ubuntu 14.04 bochs 2.4.5 一.下载 官网 http://bochs.sourceforge.net/ 二.安装 1.将下载好的压缩包解压并进入该目录 tar vxzf bochs-2.4.5.tar.gz cd bochs-2.4.5 2.安装编译程序依赖的包 sudo apt-get install build-essential 3.检测环境,打开调试功能的开关 ./configure --enable-debugger --enable-disasm

php源码安装常用配置参数和说明

常用的配置参数1. --prefix=/usr/local/php 指定 php 安装目录 install architecture-independent files in PREFIX 默认/usr/local2.--with-config-file-path=PATH php.ini的存放位置 Set the path in which to look for php.ini [PREFIX/lib] --with-config-file-scan-dir=PATH php.ini的扩展目

PHP 源码安装常用配置参数和说明

常用的配置参数1. --prefix=/usr/local/php指定 php 安装目录install architecture-independent files in PREFIX 默认/usr/local2.--with-config-file-path=PATHphp.ini的存放位置Set the path in which to look for php.ini [PREFIX/lib]--with-config-file-scan-dir=PATHphp.ini的扩展目录Set t