martes, 20 de octubre de 2009

Evictions en memcached

En la aplicación en la que estoy trabajando tenemos memcached distribuido entre varias máquinas. Normalmente voy comprobando periódicamente que el tamaño usado sea menor al máximo tamaño disponible y lo teniamos configurado a 64 MB por máquina, ya que parecía suficiente.

En la traza se puede ver como tiene algo más de 40 MB (bytes) ocupados de los 64MB disponibles (limit_maxbtyes). El estado se puede consultar utilizando el método stats de la gema memcache-client o directamente haciendo un telnet al puerto donde está levantado tal y como contaba Jacobo hace unos meses en su blog:

bytes: 44140784
pid: 27269
connection_structures: 223
threads: 1
evictions: 215279
time: 1255950371
pointer_size: 32
limit_maxbytes: 67108864
cmd_get: 12315783
version: 1.2.2
bytes_written: 48564944477
cmd_set: 1505495
get_misses: 563019
total_connections: 643702
curr_connections: 61
curr_items: 15957
uptime: 9589358
get_hits: 11752764
total_items: 582809
rusage_system: 172.8108
rusage_user: 67.872241
bytes_read: 19210833034


Pero leyendo lo que significa cada uno de los parámetros de memcached en la web de escalabilidad de MySQL, me he dado cuenta de que el parámetro importante a comprobar es evictions. Eviction (que se puede traducir como desalojo), indica el número de elementos válidos de la caché borrados para liberar memoria para nuevos elementos y que debería ser cero o un número muy pequeño.

Así que hemos ampliado la memoria de memcached en todos los servidores a 128MB y efectivamente, nos habiamos quedado muy cortos.... ahora están ocupando sobre 90MB cada uno y a partir de ahora el parámetro a monitorizar es evictions :-)

Actualizacion 30/10/2009: Acabo de leer en Building Scalable Web Sites una forma alternativa de ver el status de memcached utilizando netcat. Suponiendo que está instalado en localhost en el puerto 11211

echo -ne "stats\r\n" | nc -i1 localhost 11211

Otra opción es utilizar memcache-top para ver las estadísticas en formato top (gracias a Paco por el enlace)

Actualizacion 16/10/2013:  Y cuatro años despues actualizo con otra forma de consultar los stats

/usr/share/memcached/scripts/memcached-tool localhost:11211 stats


4 comentarios:

  1. Tras el cambio en cuantos evictions nos hemos quedado?

    ResponderEliminar
  2. Implementamos memcached para http://www.decasasyautos.com.
    http://www.decasasyautos.com es un sitio de clasificados gratis para España, Argentina y todo el mundo. El parametro Evictions de nuestro site siempre esta en 0. Es eso siempre bueno?

    Javier
    http://www.decasasyautos.com

    ResponderEliminar
  3. Hola Javier

    Es la situación ideal que esté a cero, de todas formas si el porcentaje de evictions respecto al total de peticiones (get_hits) es bajo tampoco es un problema.

    Comprueba tambien el porcentaje de memoría usado (bytes respecto a limit_maxbytes) y si es muy pequeño es que estás infrautilizando memcached. En ese caso podrías cambiar la configuración para que use menos memoria o cachear más partes del site.

    ResponderEliminar