作为一个分布式缓存系统,memcached 可以非常出色地完成你交给它的工作,但这并不代表你可以对它放任不管,相反,我 们需要知道它的运行状况。memcached 提供了这样的协议,可以让你获得它的实时状态,我们通过 PHP 扩展可以十分容易地 做到。
以下的代码片段用来获取 memcached 的状态:
<?php $memcache = memcache_connect('10.0.1.12', 11711); $stats = $memcache ->getStats(); var_dump($stats); ?>
我们来看一下包含了 memcached 运行状态的数组,如下所示
array(22) { ["pid"]=> string(4) "3950" ["uptime"]=> string(8) "14670598" ["time"]=> string(10) "1239857310" ["version"]=> string(5) "1.2.2" ["pointer_size"]=> string(2) "32" ["rusage_user"]=> string(12) "14261.343278" ["rusage_system"]=> string(12) "65035.856487" ["curr_items"]=> string(8) "24144013" ["total_items"]=> string(9) "175459454" ["bytes"]=> string(10) "2562440230" ["curr_connections"]=> string(2) "13" ["total_connections"]=> string(10) "1433357990" ["connection_structures"]=> string(3) "164" ["cmd_get"]=> string(10) "1414539975" ["cmd_set"]=> string(9) "175563032" ["get_hits"]=> string(10) "1328926319" ["get_misses"]=> string(8) "85613656" ["evictions"]=> string(1) "0" ["bytes_read"]=> string(13) "1513089335558" ["bytes_written"]=> string(13) "4661687357256" ["limit_maxbytes"]=> string(10) "4284481536" ["threads"]=> string(1) "1" }
真是面面俱到,你可以从这些数据中获得很多的信息,比如 uptime 表示 memcached 持续运行的时间;cmd_get 表示读取数据 项的次数;cmd_set 表示更新数据项的次数;get_hits 表示缓存命中的次数;bytes_read 表示读取的总字节数;bytes 表示缓存 区已使用空间的大小;limit_maxbytes 表示缓存区空间的总大小。
对于这些丰富的状态信息,我们可以简单地从以下三个方面来看。
空间使用率
持续关注缓存空间的使用率,可以让我们知道何时需要为缓存系统扩容,以避免由于缓存空间已满造成的数据被动淘汰, 有些数据项在过期之前被 LRU 算法淘汰可能会造成一定的不良后果。
缓存命中率
这个话题在此处已经一点都不新鲜了,在前面关于反向代理缓存的章节中,我们曾经详细介绍过影响命中率的因素,它 们在这里同样适用。
I/O 流量
我们需要关注 memcached 中数据项读写字节数的增长速度,这反映了它的工作量,我们可以从中得知 memcached 是空 闲还是繁忙。
同样,我们也希望在监控系统中集成对于 memcached 的监控,如图 1-1 及图 1-2 所示便是在 cacti 监控系统中对 memcached 的某些监控图片,我们会在本书的末尾介绍 cacti 监控系统。
图 1-1 在 cacti 中监控 memcached 的使用率
图 1-2 在 cacti 中监控 memcached 的 I/O 流量
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程