欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

详解MemCache指令

发布时间:2016-08-20 22:42  回复:0  查看:3003   最后回复:2016-08-20 22:42  

学习MemCache的都知道,已知MemCache的某个节点,直接telnet过去,就可以使用各种命令操作MemCache了,下面学习MemCache的几种命令:

命    令

作    用

get

返回Key对应的Value值

add 

添加一个Key值,没有则添加成功并提示STORED,有则失败并提示NOT_STORED

set 

 无条件地设置一个Key值,没有就增加,有就覆盖,操作成功提示STORED

replace 

按照相应的Key值替换数据,如果Key值不存在则会操作失败 

stats

返回MemCache通用统计信息(下面有详细解读)

stats items

返回各个slab中item的数目和最老的item的年龄(最后一次访问距离现在的秒数)

stats slabs

返回MemCache运行期间创建的每个slab的信息(下面有详细解读)

version

返回当前MemCache版本号

flush_all

清空所有键值,但不会删除items,所以此时MemCache依旧占用内存

quit

关闭连接

 

stats指令解读

stats是一个比较重要的指令,用于列出当前MemCache服务器的状态,拿一组数据举个例子:

 

STAT pid 1023STAT uptime 21069937STAT time 1447235954STAT version 1.4.5STAT pointer_size 64STAT rusage_user 1167.020934STAT rusage_system 3346.933170STAT curr_connections 29STAT total_connections 21STAT connection_structures 49STAT cmd_get 49STAT cmd_set 7458STAT cmd_flush 0STAT get_hits 7401STAT get_misses 57..(delete、incr、decr、cas的hits和misses数,cas还多一个badval)

STAT auth_cmds 0STAT auth_errors 0STAT bytes_read 22026555STAT bytes_written 8930466STAT limit_maxbytes 4134304000STAT accepting_conns 1STAT listen_disabled_num 0STAT threads 4STAT bytes 151255336STAT current_items 57146STAT total_items 580656STAT evicitions 0

 

这些参数反映着MemCache服务器的基本信息,它们的意思是:

 

参  数  名

作      用

pid

MemCache服务器的进程id 

uptime

服务器已经运行的秒数

time

服务器当前的UNIX时间戳 

version

MemCache版本 

pointer_size

当前操作系统指针大小,反映了操作系统的位数,64意味着MemCache服务器是64位的 

rusage_user

进程的累计用户时间 

rusage_system 

进程的累计系统时间 

curr_connections 

 当前打开着的连接数

total_connections 

 当服务器启动以后曾经打开过的连接数

connection_structures 

服务器分配的连接构造数 

cmd_get 

get命令总请求次数 

cmd_set

set命令总请求次数 

cmd_flush 

flush_all命令总请求次数 

get_hits 

总命中次数,重要,缓存最重要的参数就是缓存命中率,以get_hits / (get_hits + get_misses)表示,比如这个缓存命中率就是99.2% 

get_misses 

总未命中次数 

auth_cmds 

认证命令的处理次数 

auth_errors 

认证失败的处理次数 

bytes_read 

总读取的字节数

bytes_written 

总发送的字节数 

 limit_maxbytes

分配给MemCache的内存大小(单位为字节) 

accepting_conns 

是否已经达到连接的最大值,1表示达到,0表示未达到

listen_disabled_num 

统计当前服务器连接数曾经达到最大连接的次数,这个次数应该为0或者接近于0,如果这个数字不断增长, 就要小心我们的服务了

threads 

当前MemCache总线程数,由于MemCache的线程是基于事件驱动机制的,因此不会一个线程对应一个用户请求 

bytes 

当前服务器存储的items总字节数

current_items 

当前服务器存储的items总数量 

total_items 

自服务器启动以后存储的items总数量 

 

stats slab指令解读

 

如果对上面的MemCache存储机制比较理解了,那么我们来看一下各个slab中的信息,还是拿一组数据举个例子:

 

 STAT1:chunk_size 96 
 ... 
 STAT 2:chunk_size 144 
 STAT 2:chunks_per_page 7281 
 STAT 2:total_pages 7 
 STAT 2:total_chunks 50967 
 STAT 2:used_chunks 45197 
 STAT 2:free_chunks 1 
 STAT 2:free_chunks_end 5769
 STAT 2:mem_requested 6084638
 STAT 2:get_hits 48084
 STAT 2:cmd_set 59588271
 STAT 2:delete_hits 0
 STAT 2:incr_hits 0
 STAT 2:decr_hits 0
 STAT 2:cas_hits 0
 STAT 2:cas_badval 0
 ...
 STAT 3:chunk_size 216
 ...

 

首先看到,第二个slab的chunk_size(144)/第一个slab的chunk_size(96)=1.5,第三个slab的chunk_size(216)/第二个slab的chunk_size(144)=1.5,可以确定这个MemCache的增长因子是1.5,chunk_size以1.5倍增长。然后解释下字段的含义:

 

参  数  名

作      用

chunk_size

当前slab每个chunk的大小,单位为字节

chunks_per_page

每个page可以存放的chunk数目,由于每个page固定为1M即1024*1024字节,所以这个值就是(1024*1024/chunk_size)

total_pages

分配给当前slab的page总数

total_chunks

当前slab最多能够存放的chunk数,这个值是total_pages*chunks_per_page

used_chunks

已经被分配给存储对象的chunks数目

free_chunks

曾经被使用过但是因为过期而被回收的chunk数

free_chunks_end

新分配但还没有被使用的chunk数,这个值不为0则说明当前slab从来没有出现过容量不够的时候

mem_requested

当前slab中被请求用来存储数据的内存空间字节总数,(total_chunks*chunk_size)-mem_requested表示有多少内存在当前slab中是被闲置的,这包括未用的slab+使用的slab中浪费的内存

get_hits

当前slab中命中的get请求数

cmd_set

当前slab中接收的所有set命令请求数

delete_hits

当前slab中命中的delete请求数

incr_hits

当前slab中命中的incr请求数

decr_hits

当前slab中命中的decr请求数

cas_hits

当前slab中命中的cas请求数

cas_badval

当前slab中命中但是更新失败的cas请求数

看到这个命令的输出量很大,所有信息都很有作用。举个例子吧,比如第一个slab中使用的chunks很少,第二个slab中使用的chunks很多,这时就可以考虑适当增大MemCache的增长因子了,让一部分数据落到第一个slab中去,适当平衡两个slab中的内存,避免空间浪费。

 

 

文章来自:五月的仓颉

您还未登录,请先登录

热门帖子

最新帖子