memcached启动过程1

启动过程安装main函数调用函数来分析

1 sanitycheck 这个是完整性分析,主要是查看libevent版本是不是1.1或者1.2,如果低于1.1 1.2 请升级到1.1 或者最高(调用event_get_version返回一个字符串)(在自己的电脑上面得到的版本是2.0.21-stable 编译的时候要加上-levent这个库名字) 


2signal 定义SIGINT 处理办法就是退出,这个是对中断信号的处理方法


3 setbuf调用此函数来关闭出错缓冲setbuf(stderr,NULL);


4 (一个大循环基本可以就结束了)while循环调用getopt 返回值不为-1

getopt 第一第二参数主函数的参数

后面解释一下用户输入参数的选项的意思

-a  后面接的8八进制表示unix socket权限

-p tcp链接服务器的端口

-s unix socket 目录

-U udp端口

-m 最大内存

-M 内存耗尽返回错误 后面无需参数

-c 最大链接

-k锁定所有分页内存 后面无需参数

-hi 帮助信息,以及注册信息(后面无需参数)

-v表示详细信息 无需参数

-d表示deamon模式运行

-l 表示监听借口

-p 保存memcached进程pid文件

-n 最小分配给key+value+flags内存空间大小

-t 线程数目

-L 大内存页(不懂

-R 每个事件最大连接数

-C不适用cas 后面不带参数

-B绑定协议

-S打开sasl (这个需要首先安装libsasl,然后安装gsasl)

-o 扩展选项

(如果在循环内调用while (-1 != (c = getopt(argc, argv, "a:"   "p:"  "s:")) ){

cout << optarg<< endl;(optarg是全局变量

}

此时主函数的参数是-a 100 -p 999 -s fasdfas 

调用的时候输出是

100

999

fasdfas


实际上在memcached中将所有的-* 后面的参数赋给全局结构体settings中的某个成员

case a 是调用strtol将optarg转换为8进制的书返回给settings成员access

case U 是调用atoi将optarg转为整数赋给settings成员udpport

case p 调用atoi将optarg转为整数赋给settings成员port(也就是默认的tcp协议端口)

case s 将optarg直接赋给settings成员socketpath

case m 调用atoi将optarg转为整数赋给settings成员maxbytes然后乘以1024*1024 实际上就是限制了最大的内存空间(以兆为单位)

case M 内存耗尽将settings成员evict_to_free赋为0

case c 调用atoi将optarg转为整数赋给赋给settings成员 maxconns

case h 调用usage(),输出用法信息,然后调用exit退出

case i 调用useage_license,然后退出

case k 将main内变量lock_memory设为1

case v 将赋给settings成员verbose 自加1

case l 如果赋给settings成员inter不为空,则将-l后面的参数和inter一起放入inter,如果为空则将-l后面参数赋给inter

case d 使用deamon模式yunxing

case r 将main变量maxconre设为1

case R 将optarg转为整数赋给赋给settings成员reqs_per_event

case u 将optarg赋给username

case p  将optarg赋给pid_file

case f  将optarg转换为浮点数也就是每次相乘的不是2,而是转为浮点数的赋给settings成员factor变量(且不能小于1)

case t 将调用atoi将optarg转为整数赋给赋给settings成员赋给settings成员num_threads也就是多少个线程运行如果线程数大于64或者小于0都不行

case D 如果optarg为空或者第一个字符为空,main函数返回,程序终止,如果不成立则将optarg第一个字符赋给赋给settings成员prefix_delimiter,然后settings.detail_enabled = 1;

case L 如果支持大叶分配则将preallocate赋为true,如果不支持则返回错误信息

case C settings成员use_cas赋为0

case b 调用atoi将optarg转为整数赋给settings成员backlog

case B 如果optarg为auto则将settings成员binding_protocol 赋为negotiating_prot,如果为binary则将settings.binding_protocol = ascii_prot;settings.binding_protocol = binary_prot;如果为ascii则将settings.binding_protocol = ascii_prot;,其他选项都是错误的

case I,optarg最后一个字符如果为k或者K,m,M,则将optarg转为内存大(如果最后为k,K则是多少kB字节,如果为M,m则是多少兆字节),然后赋给settings.item_size_max,

case S如果 本系统支持sasl则将将settings成员sasl赋为true,如果不支持打印输出

case o 调用getsubopt来得到optarg参数下的子参数,比如hashpower_init slab_reassign,slab_autmove等等

循环结束


如果全局结构体settings成员inter不为空,且inter里面有一个,号,则settings.num_threads_per_udp = 1;否则settings.num_threads_per_udp = settings.num_threads;


如果settings成员sasl不为false,如果指定了协议,则将settings绑定的协议


太详细了,换成自己的语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值