分类: LINUX
2013-04-05 18:57:20
一、slab内存结构
二、主要启动参数
-p:设置TCP监听端口。如果-l选项包含端口,则不使用本端口;如果没有-p选项有-U选项,那么tcp端口与UDP端口相同。
-U:设置UDP端口(0不使用UDP)。如果-l选项包含端口,则不适用本端口;如果没有-U选项有-p选项,那么UDP端口与tcp端口相同。
-l:指定监听地址,默认INADDR_ANY或监听地址和端口,并且可以指定多个端口。例如:-l 0.0.0.0:10086 -l 0.0.0.0:10087。如果-l参数中有监听地址,那么将不适用-p和-U设置端口。
-s:unix本地域socket文件路径。
-a:指定-s选项中socket权限,默认0700。
-d:以守护进程方式运行。
-r:设置core文件为RLIM_INFINITY
-u:指定用户,当使用root用户运行memcached时,启动后将进程转换到该用户下。
-m:最大数据内存数量,item使用内存,非程序本身使用,单位为MB。
-M:指定该选项,内存不足,不足以分配slab时报错。否则强制itemLRU替换。
-c:打开最大文件描述符数目。setrlimit调节。
-k:锁住程序内存页mlockall(MCL_CURRENT | MCL_FUTURE)。ulimit -l 参数查看系统限制。
-P:保存PID到执行文件中。-d模式启动使用。启动时检查文件中的进程并杀掉进程。
-f:chunk增长因子,默认1.25。
-n:指定最小chunk的key+suffix+value大小。Item (no cas) 48,Item(cas) 56。当指定-C选项时,最小chunk为-n指定大小+48;当没有-C选项时,最小chunk为-n指定大小+56。
-L:大内存模式,启动时分配-m参数指定大小内存,可以检查内存碎片,增加内存利用率。需要操作系统支持(getpagesizes,memcntl)。
-t:启动处理网络请求线程数。默认是4。
-R:每个线程最大处理请求事件数目。
-C:不适用CAS命令,item没有版本号。
-b:tcp连接请求的最大数量(backlog队列最大数量)。
-B:协议ascii,binary,auto(默认)。auto根据请求内容自动判断,binary0x80开头
-I:指定item大小:default: 1mb, min: 1k, max: 128m
-D:设置key前缀和key值的分隔符,默认“:”,例如 “-D '#'”,则”get name#wang“命令时,会统计前缀name的命中次数等。
-o:4个子参数选项。maxconns_fast,hashpower=13(大于12,小于64),slab_reassign,slab_automove=0(默认),1,2。
1) maxconns_fast:当连接数超过最大连接数(-c),立即返回错误并关闭连接。
2) hashpower:设置hashpower_init。
3) slab_reassign:启动SLAB重分配线程,slab_reassign=true。
4) 当slab_automove=2时,当第一次发生LRU后(没有指定-M选项,并且内存不足时。),从slabclass1开始向后查找一个有2个slab page以上的slab class并将第一页强制分配给发生LRU的slabclass。第二次发生LRU后,会从上一次选取的class之后进行查找合适的class进行page转移。
5) 当slab_automove=1时,有slab_maintenance_thread线程自己选取src page,dest page进行转移。10秒检查一次。