Memcached/Libmemcached使用经验总结(一)

  • Post author:
  • Post category:其他

Memcached/Libmemcached使用经验总结(一)

kejieleung

一、编译

1.编译Memcached(C++服务器端)

目前最新版本 1.4.4

确认系统已安装libevent

$ tar -zxvf memcached-1.x.x.tar.gz

$ ./configure

$ make

$ make test

$ sudo make install

2.编译Libmemcached(C++客户端)

目前最新版本 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客户端会做大量的mallocfree操作,每次get都会mallocfree一次,这个选项应该会有效果的

(2)服务端应该会采用内存池去管理,应该不会频繁进行mallocfree操作

二、配置

1.启动参数

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到文件,这样可以方面通过这个pidkill掉进程(详见附件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

 


版权声明:本文为kikikind原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。