目前最新版本 1.4.4
确认系统已安装libevent
$ tar -zxvf memcached-1.x.x.tar.gz
$ ./configure
$ make
$ make test
$ sudo make install
目前最新版本 0.37
1. 编译0.37版本编译出现错误
undefined reference to `__sync_fetch_and_add_4'
由于编译器设置所到,加上以下的标识,再./configure一下
export CFLAGS="${CFLAGS} -march=i486"
另外对于CentOS配置优化编译参数可提高性能
2. 安装完后加入连接
ln -s /usr/local/lib/libmemcached.so.2 /usr/lib/ 共享库才可以被其它程序加载到
3. 编译静态库
./configure --enable-static
(可以使用 ./configure --h查看编译选项)
4. 带tcmalloc编译
编译libmemcached时发现有一个选项,编译时可以带上 tcmalloc,只是没测试过高并发下性能会不会提高。
(1) libmemcache客户端会做大量的malloc和free操作,每次get都会malloc和free一次,这个选项应该会有效果的
(2)服务端应该会采用内存池去管理,应该不会频繁进行malloc和free操作
1)/usr/local/bin/memcached -d -u daemon -l xxx.xxx.xxx.xxx -p 11211 -m 2048 -n 48 -f 1.15 -c 800000
-d 以守护进程方式运行
-c 为必定指定参数,打开文件(socket)上限,以支持大量连接,由于修改系统配置,需要以root帐号执行
-l 绑定ip
-p 绑定端口
-m memcached进程分配的内存量,由于32位机器寻址限制,通常是分配2G内存到一个memcached进程,并启动多个进程(但需要注意的是,当内存不足时,会临时使用交换分区,导致性能大幅度下降)
-n 初始分配块的大小( slab块)
-f 增长系数( 当数据块超出当前系统已分配的slab内存块时,会再申请一个更大的内存块,而且存储是定长的,默认系数是2, 即本次分配大小发N,不足时再分配大小为2N的内存块。为了提高利用率,所以设定较少的增长系数)
另外可以通过配置参数 -P 指定生成进程pid到文件,这样可以方面通过这个pid来kill掉进程(详见附件tool里的start_memcached.sh/stop_memcached.sh脚本)
2)查看/修改系统 ulimit参数, ulimit -n 800000. 客户端连接也可支持这样的大量连接
3)注意客户端通过设置.ini文件里,的 MaxOpenFile 大小,设置过低会导致大量连接错误
4)如果机器上装有多个memcached版本,注意执行的路径
对于Memcached的使用和详细介绍,可以看一下《memcached全面剖析》
http://docs.linuxtone.org/memcached/memcached%E5%85%A8%E9%9D%A2%E5%89%96%E6%9E%90.pdf