首页 > 代码库 > memcached监控
memcached监控
Memcached性能测试技术标准介绍
主体监控思路虽大致相同,但细节仍然需要认真把握, 对于团队来讲,则进入到了一个盲区,为了走出来,拨云见日,这几天我们对M emcached 的相关技术进行了补课。
1 先来讲讲大概的结构:
M emcached 默认情况下采用了名为Slab Allocator 的机制分配 , 将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(class )
M emcached 会 根据收到的数据的大小 ,选择合适的 class与chunks,并 将数据缓存于其中 。从上图我们可以看到, 由于分配的是特定长度的内存,因此 就存在了 无法有效利用内存 的情况 。例如,将100 字节的数据缓存到128 字节的chunk 中,剩余的28字节就浪费了 。
结构大致了解到这里就差不多了,再往下讲起来会比较晦涩。
2 现在来看看 删除机制
主要有两点
(1). 惰性超时机制( Lazy Expiration )
M emcached 不 主动 监视记录是否过期,而是在get 时 才 查看记录的时间戳,检查记录是否过期。 这样有一个好处 。不会在过期监视上耗费CPU 时间 。
(2). 最近最少使用删除 机制 ( LRU )
M emcached 会优先使用已超时的记录的空间,当 M emcached 的内存空间不足时(无法从class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。
因为 Lazy Expiration 、 LRU机制的存在,M emcached 的中的缓存数据并不总是准时删除,存在延迟或提前的可能性,故在测试的过程中不能盲目认定缓存时设定的 expire 时间是完全固定的。
3 再来看看用的最多的stats 命令
首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。
pid | memcache服务器的进程ID |
uptime | 服务器已经运行的秒数 |
time | 服务器当前的unix时间戳 |
version | memcache版本 |
pointer_size | 当前操作系统的指针大小(32位系统一般是32bit) |
rusage_user | 进程的累计用户时间 |
rusage_system | 进程的累计系统时间 |
curr_items | 服务器当前存储的items数量 |
total_items | 从服务器启动以后存储的items总数量 |
bytes | 当前服务器存储items占用的字节数 |
curr_connections | 当前打开着的连接数 |
total_connections | 从服务器启动以后曾经打开过的连接数 |
connection_structures | 服务器分配的连接构造数 |
cmd_get | get命令(获取)总请求次数 |
cmd_set | set命令(保存)总请求次数 |
get_hits | 总命中次数 |
get_misses | 总未命中次数 |
evictions | 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) |
bytes_read | 总读取字节数(请求字节数) |
bytes_written | 总发送字节数(结果字节数) |
limit_maxbytes | 分配给memcache的内存大小(字节) |
threads | 当前线程数 |
Memcached |
||||||||
version: |
||||||||
编号 |
参数名称 |
架构分类 |
分析价值 |
获取方式 |
默认值 |
单位 |
含义 |
|
1 |
gethits |
命中率 |
关键 |
监控获取 |
|
次 |
获取数据成功的次数 |
|
2 |
get_misses |
命中率 |
辅助 |
监控获取 |
|
次 |
表示获取数据失败的次数 |
|
3 |
cmd_get |
命中率 |
关键 |
监控获取 |
|
次 |
查询请求总数(gethits+get_misses) |
|
4 |
total_connections |
连接数 |
辅助 |
启动获取 |
|
个 |
从memcached服务启动到当前时间,系统打开过的连接的总数 |
|
5 |
connection_structures |
连接数 |
关键 |
启动获取 |
1024 |
个 |
服务器分配时的连接构造数 |
|
6 |
curr_connections |
连接数 |
关键 |
监控获取 |
|
个 |
当前系统打开的连接数 |
|
7 |
total_malloced |
内存占用 |
关键 |
监控获取 |
|
byte |
实际已分配的总内存数 |
|
8 |
limit_maxbytes |
内存占用 |
关键 |
启动获取 |
67108864 |
byte |
服务缓允许使用的最大字节数 |
|
9 |
curr_items |
LRU |
关键 |
监控获取 |
|
个 |
当前缓存中存放的对象的数量,不包括目前已经从缓存中删除的对象 |
|
10 |
total_items |
LRU |
关键 |
监控获取 |
|
个 |
从启动到当前时间,系统存储过的所有对象的数量,包括已删除对象 |
|
11 |
evictions |
LRU |
关键 |
监控获取 |
|
个 |
LRU空间用满后需要删除旧的items数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memcached监控