Comprendiendo las estadísticas del Memcached
Memcached (o Memcache) incorpora un sistema de estadísticas interno que nos permite conocer el estado del demonio, su capacidad restante de almacenamiento, uso, conextiones, etcétera.
Para acceder a él a través del cliente de Ruby, por ejemplo, basta con cargar una consola en el entorno deseado e invocar al método stats del objeto de caché.
Por ejemplo, si nuestra configuración es la siguiente:
CACHE = MemCache.new 'localhost:11211', :namespace => 'wadus_fragments'
Podemos utilizar el objeto CACHE de la siguiente manera:
pp CACHE.stats
{"bytes"=>746532339,
"pid"=>10303,
"connection_structures"=>19,
"time"=>1200349556,
"limit_maxbytes"=>1073741824,
"cmd_get"=>689486,
"version"=>"1.1.12",
"bytes_written"=>3296488315,
"cmd_set"=>265986,
"get_misses"=>265168,
"total_connections"=>1238,
"curr_connections"=>17,
"curr_items"=>66977,
"uptime"=>56490,
"get_hits"=>424318,
"total_items"=>265986,
"rusage_system"=>95.012555,
"rusage_user"=>17.16339,
"bytes_read"=>3226552602}
La interpretación de todos estos valores se puede encontrar en la definición del protocolo:
Name Type Meaning
----------------------------------
pid 32u Process id of this server process
uptime 32u Number of seconds this server has been running
time 32u current UNIX time according to the server
version string Version string of this server
pointer_size 32 Default size of pointers on the host OS
(generally 32 or 64)
rusage_user 32u:32u Accumulated user time for this process
(seconds:microseconds)
rusage_system 32u:32u Accumulated system time for this process
(seconds:microseconds)
curr_items 32u Current number of items stored by the server
total_items 32u Total number of items stored by this server
ever since it started
bytes 64u Current number of bytes used by this server
to store items
curr_connections 32u Number of open connections
total_connections 32u Total number of connections opened since
the server started running
connection_structures 32u Number of connection structures allocated
by the server
cmd_get 64u Cumulative number of retrieval requests
cmd_set 64u Cumulative number of storage requests
get_hits 64u Number of keys that have been requested and
found present
get_misses 64u Number of items that have been requested
and not found
evictions 64u Number of valid items removed from cache
to free memory for new items
bytes_read 64u Total number of bytes read by this server
from network
bytes_written 64u Total number of bytes sent by this server to
network
limit_maxbytes 32u Number of bytes this server is allowed to
use for storage.
threads 32u Number of worker threads requested.
(see doc/threads.txt)
En concreto cuatro parámetros me han parecido interesantes de observar:
- el parámetro
bytesjunto con el delimit_maxbytes: el primero representa el total de bytes ocupados actualmente, frente el máximo. - el número de fallos de caché que refleja el valor del parámetro
get_missesjunto con el número de aciertosget_hits
Los primeros nos permiten saber si hemos llegado al límite el almacenamiento que necesita nuestra aplicación y el segundo nos permite saber si nuestra política de caché es adecuada: diviendo hits entre misses obtenemos la proporción de fragmentos encontrados frente a fragmentos que ya no existían. Un valor de 1 indica que por cada dos búsquedas, una tiene éxito y otra no.
Por supuesto un valor inferior a uno muestra que la caché no sirve de nada (indicaría por ejemplo que necesitaríamos ampliar el Memcache o que tenemos una política de borrado "exagerada").
