`
hooray520
  • 浏览: 113982 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

memcached 命令汇总

 
阅读更多
官方的protocol.txt可以在memcached原作者的git上找到:https://github.com/memcached/memcached/blob/master/doc/protocol.txt

stats系列命令因为返回的字段、数值比较多,比较复杂,而且都有他们自己的意思,所以特地抽出来。

1. stats
在stats命令返回的数据里,“32u”类型表示一个32位长的无符号整型,“64u”类型表示一个64位长的无符号整型。“32u.32u”类型表示两个由冒号分隔的32位无符号整型(看做是浮点数)。

  
|-----------------------+---------+-------------------------------------------
| Name                  | Type    | Meaning
|-----------------------+---------+-------------------------------------------
| pid                   | 32u     | memcached服务器的进程id号
| uptime                | 32u     | memcached自启动至今的时长(按秒计算)
| time                  | 32u     | 服务器当前的UNIX时间戳
| version               | string  | memcached的版本号字符串
| pointer_size          | 32      | 默认的服务器操作系统指针尺寸(一般为32或64)
| rusage_user           | 32u.32u | memcached进程用户态的累计时长(秒:毫秒)
| rusage_system         | 32u.32u | memcached进程内核态的累计时长(秒:毫秒)
| curr_items            | 32u     | memcached当前存储的对象数量
| total_items           | 32u     | memcached自启动至今存储过的对象数量
| bytes                 | 64u     | memcached当前用来存储数据所消耗的内存量(字节)
| curr_connections      | 32u     | memcached当前打开的连接
| total_connections     | 32u     | memcached自启动至今打开过的连接数
| connection_structures | 32u     | memcached分配的连接结构的数量
| cmd_get               | 64u     | get命令的总次数
| cmd_set               | 64u     | set命令的总次数
| get_hits              | 64u     | get命令命中的总次数
| get_misses            | 64u     | get命令未命中的总次数
| delete_misses         | 64u     | delete命令未命中的总次数
| delete_hits           | 64u     | delete命令命中的总次数
| incr_misses           | 64u     | incr命令未命中的总次数
| incr_hits             | 64u     | incr命令命中的总次数
| decr_misses           | 64u     | decr命令未命中的总次数
| decr_hits             | 64u     | decr命令命中的总次数
| cas_misses            | 64u     | cas命令未命中的总次数
| cas_hits              | 64u     | cas命令命中的总次数
| cas_badval            | 64u     | cas命令命中却更新失败的总次数
| auth_cmds             | 64u     | memcached接受到所有的授权命令,无论成功失败
| auth_errors           | 64u     | memcached接受到的所有失败的授权命令
| evictions             | 64u     | 因LRU机制而被主动覆盖(删除)的对象数目
| reclaimed             | 64u     | memcached启动至今有多少次在存储数据的时候使用了过期数据的空间
| bytes_read            | 64u     | memcached从网络中读取的总数据字节数
| bytes_written         | 64u     | memcached向网络中写入的总数据字节数
| limit_maxbytes        | 32u     | memcached所有可以用来存储的内存的字节数(启动时候定义好的)
| threads               | 32u     | worker线程数量(具体请查看doc/threads.txt)
| conn_yields           | 64u     | memcached启动至今有多少次打开的连接因为内部请求数达到-R参数指定的限值,
|                       |         | 一个连接的操作主动放弃让给另一个连接(不是很明白什么意思,具体可以参考-R参数的含义)
|-----------------------+---------+-------------------------------------------
2. stats settings
附带上“settings”参数的“stats”命令将会返回运行中的memcached的具体的settings信息。
注意这里不保证统计项的次序,列表也不一定是详尽的。除此之外,它的返回结果与其它的stats命令是一样的。
Source code	   
|-------------------+----------+----------------------------------------------
| Name              | Type     | Meaning
|-------------------+----------+----------------------------------------------
| maxbytes          | size_t   | memcached可分配的最大缓存内存字节数
| maxconns          | 32       | memcached允许的连接数最大数值
| tcpport           | 32       | TCP监听端口
| udpport           | 32       | UDP监听端口
| inter             | string   | 监听的host地址
| verbosity         | 32       | memcached运行信息输出级别:0 = none, 1 = some, 2 = lots
| oldest            | 32u      | memcached当前存储的对象中最长的存活时长
| evictions         | on/off   | 当设成off的时候,LRU机制将不会启用
| domain_socket     | string   | Unix socket的文件路径(如果存在的话)
| umask             | 32 (oct) | 创建Unix socket的umask
| growth_factor     | float    | Chunk尺寸增长因子数值
| chunk_size        | 32       | 最小的chunk尺寸(key+value+flags)
| num_threads       | 32       | 线程数量(包括dispatch的)
| stat_key_prefix   | char     | Stats命令分隔符
| detail_enabled    | bool     | 如果yes的话,stats的详细信息将被开启
| reqs_per_event    | 32       | 一个事件(event)中允许的最大IO操作数
| cas_enabled       | bool     | 如果no的话,CAS不会被启用
| tcp_backlog       | 32       | TCP监听队列(backlog)等待长度的最大值
| auth_enabled_sasl | yes/no   | 是否启用SASL授权请求
|-------------------+----------+----------------------------------------------

3. stats items
这个命令返回的数据都是以slab为单位显示的:

	   
|------------------------+---------------------------------------
| Name                   | Meaning
|------------------------+---------------------------------------
| number                 | 当前slab中存储的对象数量,过期的对象不会主动被排除出去
| age                    | LRU中存活时间最长的对象的存活时长
| evicted                | 根据LRU原则不得不在过期之前就被删除的对象的个数
| evicted_nonzero        | 根据LRU原则不得不在过期之间就被删除,且有被设过过期时间的对象个数
| evicted_time           | 在该slab中,最近一次对象因为LRU机制而被删除的时间点到现在的秒数,
|                        | 用这个来做LRU的频率监控
| outofmemory            | 该slab无法为新对象分配内存空间的次数,出现这个数值意味着
|                        | memcached在运行的时候带上了-M参数或者存在LRU删除失败
| tailrepairs            | 这个数值表示了我们自己解决的slab引用泄露的次数,
|                        | 如果这个数值增长很多,请联系开发人员
| reclaimed              | memcached使用一个过期数据的空间来存储数据的次数
|------------------------+---------------------------------------

这个命令将只会显示存在数据的slab的信息,所以一个空的缓存将会返回空集。
4. stats sizes
这个stats命令将会返回存储在缓存内所有对象的尺寸和个数信息。
警告:这个命令将会锁死你的缓存!它会遍历缓存内存储的每个对象,并获取他们的尺寸。虽然这个命令速度很快,但是如果你的缓存里存储了很多对象的话,这个命令还是有可能会使你的缓存在几秒钟内无法进行任何缓存服务。
命令返回的格式为:
STAT <size> <count>\r\n
这个命令会显示出,对于所有存储在你缓存中的对象,是否每32个字节就存在一个slab。你可以通过这个命令来查看,是否调整slab增长因子会节约你的内存开销。
举例来说:如果你大部分的存储对象的尺寸是小于200字节的话,创建更多小尺寸的slab会使得存储对象找到更适合它们尺寸的slab。
5. stats slabs

引用
  
|-----------------+----------------------------------------------------------
| Name            | Meaning
|-----------------+----------------------------------------------------------
| chunk_size      | 每个chunk占用的内存空间,一个存储对象将会寻找适合它尺寸的chunk来存储
| chunks_per_page | 当前数字说明了每个page可以划分成多少个chunk,一个page默认大小小于等于1M,
|                 | Slabs申请的内存是按page分配的,接着按大小划分为chunk
| total_pages     | 当前slab所分配到的page总数
| total_chunks    | 当前slab所分配到的chunk总数
| 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请求数
| used_chunks     | 已经被分配给存储对象的chunk数
| free_chunks     | 还未被分配给存储对象,或通过delete操作释放出来的chunk(注1)
| free_chunks_end | 最近分配的Page尾部空闲chunk数
| mem_requested   | 当前slab中被请求用来存储数据的内存空间字节总数(注2)
| active_slabs    | memcached分配的slab的总数
| total_malloced  | memcached分配给所有slab的pages的内存总量
|-----------------+----------------------------------------------------------

注1:个人觉得这里的原文是有问题的。原文是:“Chunks not yet allocated to items, or freed via delete.”,而我在实际使用中的感觉是这个free_chunks是指存储对象因为过期或者因为被delete掉而导致的chunk闲置(可再利用)。简单来说,这个字段的意思就是已经被分配过,但是目前可以再次被利用(过期、删除)的chunk的数量有多少。所以数据对象在被存储的时候是优先被分配到free_chunks里的,而不是优先分配到free_chunks_end里的。
注2:存储对象是被存储在尺寸等于或者大于对象尺寸的slab里的。mem_requested显示了当前slab里所有存储对象总占用的内存空间。
(total_chunks * chunk_size) – mem_requested 的结果显示了有多少内存在这个slab里是被闲置的。如果你看到闲置的内存量很大, 考虑使用slab增长因子来调节slab大小。
原文这里是total_chunks,个人觉得有点不对,应该是used_chunks + free_chunks。(used_chunks + free_chunks) * chunk_size就是用掉的chunks被分配到的内存空间,mem_requested是实际被占用掉的内存空间,两者的差值就是没有用掉的(闲置的)内存。
分享到:
评论

相关推荐

    热redis面试题汇总

    Redis主从复制是异步的,从节点通过发送PSYNC命令同步主节点的RDB文件或增量命令流。新连接的从节点会完整同步,已同步的从节点只需同步增量数据。 7. **Redis的并发控制如何处理?** Redis是单线程模型,所有...

    java面试题总汇(计算机基础、网络、存储、缓存、分布式、安全)

    【Java面试题总汇】涵盖了计算机基础、网络、存储、缓存、分布式、安全等多个方面的知识点,这些都是在IT行业中特别是Java开发岗位面试时常见的问题。下面将分别详细讲解这些领域的重点内容。 **计算机基础** 在...

    redis-面经-面试常见题汇总.docx

    - 包括Jedis、Redisson等,其中Jedis提供了全面的Redis命令支持,而Redisson则专注于分布式和可扩展的数据结构。 7. **Jedis与Redisson的区别** - Jedis功能全面,支持更多Redis特性,Redisson则简化了API,专注...

    Redis面试题汇总经典.docx

    - **noeviction**: 当内存达到限制时,Redis将拒绝执行可能增加内存使用的命令,并返回错误。 - **allkeys-lru**: 清除最近最少使用的键,使得新数据可以加入。 - **volatile-lru**: 仅清除设置了过期时间的键中的...

    Laravel cron定时任务不执行的问题汇总.docx

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/mysql/bin:/opt/php7/bin:/opt/memcached/bin:/root/bin ``` 然后在 crontab 文件中使用这个环境变量,如下: ``` * * * * * ...

    UCML问题汇总.docx

    《UCML问题汇总》 UCML(Unified Configuration Management Language)是一种特定于北京金富瑞开发平台的语言,用于处理系统配置和管理。以下是一系列关于UCML的常见问题及其解决方案: 1. **视图设计器内嵌VC使用...

    2018校招12家企业笔试真题汇总 十分全面

    3. 行为型模式:观察者、模板方法、策略、职责链、命令、解释器、迭代器、备忘录、状态、访问者模式等。 四、算法与数据结构 在面试中,算法和数据结构的考察是非常重要的一环: 1. 排序算法:冒泡、选择、插入、...

    数据库笔试面试题汇总

    这份"数据库笔试面试题汇总"无疑是面试准备的宝贵资源,涵盖了众多大公司常问的问题及其解答,帮助面试者提升自身的数据库理论知识和实践能力。以下是对这些知识点的详细解读: 1. **关系型数据库基础**: - **SQL...

    15道2022年Java经典面试题及答案汇总.docx

    Java经典面试题汇总 一、Redis 是什么? Redis 是一个 key-value 存储系统,它支持存储的 value 类型相对更多,包括 string、list、set、zset(sorted set --有序集合)和 hash。这些数据结构都支持 push/pop、...

    oracle数据库面试题目汇总

    Memcached是一种内存缓存系统,用于减少数据库访问,提高性能。Nginx作为高效的Web服务器,其反向代理和负载均衡功能使其优于传统的Apache等容器。 9. 高可用性和负载均衡技术: 为了提高MySQL的高可用性,可以使用...

    八股文知识点汇总——各互联网大厂java工程师面试题.pdf

    - Memcached是内存缓存系统,了解其基本原理、操作命令和使用场景。 - RabbitMQ和Kafka是消息中间件,关注队列、主题、消费模式等。 - Linux基础操作和系统管理,如进程管理、网络配置、文件系统等。 总结来说,这...

    最热门的Java 分布式面试题汇总

    4. 分布式session一致性:可以通过Session复制、Session黏贴或使用分布式session存储(如Redis、Memcached)来保持一致性。 5. ZooKeeper的ZAB协议:Zookeeper原子广播协议,用于保证分布式环境中数据的一致性,...

    Redis实战 中文

    ### Redis实战知识点总结 ...以上就是从《Redis实战》一书中提取的关键知识点汇总,这些内容涵盖了Redis的基本概念、特点、应用场景以及具体的使用方法,希望能够帮助读者更好地理解和掌握Redis这一强大的工具。

    MySQL DBA面试题和答案 高手总结 仅供参考

    此外还提供了与memcached兼容的NoSQL接口,使得InnoDB可以作为键值存储使用。 了解MySQL的复制原理、流程以及MyISAM和InnoDB的区别对于任何希望成为DBA的候选人来说都是至关重要的。掌握这些知识点对于在面试中展示...

    基于案例的sql优化

    1. **物化视图与汇总表**:对于常见的聚合查询,可以创建物化视图或汇总表,预先计算好结果,提高查询速度。 2. **使用并行查询**:对于大查询,可以启用并行查询选项,分担计算任务到多核处理器。 3. **优化连接...

Global site tag (gtag.js) - Google Analytics