1、item(_stritem)结构体(memcached.h 293行-310行):
|
|
conn在程序开始也进行了一次预分配,分配200个连接空间。当200个使用完之后便是按需分配,到达一个分配一个。
conn和item、iovec(内核级别缓冲结构)关联
|
- /**
- * Globally accessible settings as derived from the commandline.
- */
- struct settings {
- //最大内存, 默认64M,最大2G。通过-m 设定
- size_t maxbytes;
- //最大连接数,默认1024 通过-c设定
- int maxconns;
- //tcp 端口号,通过-p 设置
- int port;
- //ucp 端口号,通过-U 设置
- int udpport;
- //监听IP或SOCKET地址 ,通过-l设定
- char *inter;
- //是否输出debug信息。由-v,-vvv参数设定
- int verbose;
- //时间设定,当使用flsuh时,只需要修改本值,当取出的值时间小于本值时,将被忽略。
- rel_time_t oldest_live; /* ignore existing items older than this */
- //当内存存满时,是否淘汰老数据。默认是是。可用-M修改为否。此时内容耗尽时,新插入数据时将返回失败。
- int evict_to_free;
- //socket模式,使用-s设定。
- char *socketpath; /* path to unix socket if using local socket */
- //socket文件的文件权限,使用-a设定
- int access; /* access mask (a la chmod) for unix domain socket */
- //slab分配增量因子,默认围1.25, 可通过-f设定
- double factor; /* chunk size growth factor */
- //给一个key+value+flags 分配的最小字节数。 默认值为48. 可通过-n修改。
- int chunk_size;
- //工作线程数。默认围4, 可通过-t设定
- int num_threads; /* number of worker (without dispatcher) libevent threads to run */
- //状态详情的key前缀
- char prefix_delimiter; /* character that marks a key prefix (for stats) */
- //开启状态详情记录
- int detail_enabled; /* nonzero if we're collecting detailed stats */
- //每个event处理的请求数
- int reqs_per_event; /* Maximum number of io to process on each io-event. */
- //开启cas,"cas"是一个存储检查操作。用来检查脏数据的存操作。在取出数据后,如果没有其他人修改此数据时,本进程才能够存储数据。默认为开启。需要版本:1.3+
- bool use_cas;
- //使用协议, 试过-B参数设定。 可能值为:ascii, binary, or auto, 版本: 1.4.0+
- enum protocol binding_protocol;
- //等待处理的排队队列长度。默认值为1024.
- int backlog;
- //单个item最大字计数。默认1M。可通过-I参数修改。在1.4.2版本之后,这个值可以大于1M,必须小于128M。但memcached会抛出警告,大于1M将导致整体运行内存的增加和内存性能的降低。 版本: 1.4.2+
- int item_size_max; /* Maximum item size, and upper end for slabs */
- //是否开启sasl
- bool sasl; /* SASL on/off */
- };
先在命令行直接输入telnet 主机名端口号,连接到memcached服务器,然后再连接成功后,输入stats 命令,即可显示当前memcached服务的状态信息。
比如在我本机测试如下:
stats
STAT pid 1552
STAT uptime 3792
STAT time 1262517674
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 1
STAT total_items 2
STAT bytes 593
STAT curr_connections 2
STAT total_connections 28
STAT connection_structures 9
STAT cmd_get 3
STAT cmd_set 2
STAT get_hits 2
STAT get_misses 1
STAT evictions 0
STAT bytes_read 1284
STAT bytes_written 5362
STAT limit_maxbytes 67108864
STAT threads 1
END
这里显示了很多状态信息,下边详细解释每个状态项:
1. pid: memcached服务进程的进程ID
2. uptime: memcached服务从启动到当前所经过的时间,单位是秒。
3. time: memcached服务器所在主机当前系统的时间,单位是秒。
4. version: memcached组件的版本。这里是我当前使用的1.2.6。
5. pointer_size:服务器所在主机操作系统的指针大小,一般为32或64.
6. curr_items:表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
7. total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
8. bytes:表示系统存储缓存对象所使用的存储空间,单位为字节。
9. curr_connections:表示当前系统打开的连接数。
10. total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数。
11. connection_structures:表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
12. cmd_get:累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
13. cmd_set:累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
14. get_hits:表示获取数据成功的次数。
15. get_misses:表示获取数据失败的次数。
16. evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
17. bytes_read:memcached服务器从网络读取的总的字节数。
18. bytes_written:memcached服务器发送到网络的总的字节数。
19. limit_maxbytes:memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
20. threads:被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。