framework cache django memcached django-cache

django - framework - ¿Cómo sabes si Memcached está haciendo algo?



django redis cache (13)

¿Puedes usar Curl para buscar una página unos cientos de veces y medir el tiempo de los resultados? También podría ver ejecutar un proceso en el servidor que simule una gran carga de CPU / disco mientras hace esto.

Estoy probando usando memcached para almacenar en caché las vistas de django. ¿Cómo puedo saber si memcached está almacenando en caché algo de la línea de comandos de Linux?


Desde la línea de comando, prueba debajo del comando

echo stats | nc 127.0.0.1 11211 *

Si no devuelve nada, Memcache no se está ejecutando. De lo contrario, debería devolver un montón de estadísticas, incluido el tiempo de actividad (y conteos de aciertos y faltas)

El artículo de referencia está aquí, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/


Después de la publicación de Aryashree, esto me ayudó a obtener un error si memcached no se ejecuta localmente:

import subprocess port=11211 res=subprocess.Popen(''echo stats | nc 127.0.0.1 %d'' % (port), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) if res.stdout: lines=res.stdout.read() lineArr=lines.split(''/r/n'') pidlineArr=lineArr[0].split('' '') pid=pidlineArr[len(pidlineArr)-1] print("[MemCached] pid %s Running on port %d" % (pid, port)) else: raise RuntimeError("No Memcached is present on port %d" % port)


En Bash, puedes verificar las estadísticas de Memcache con este comando:

exec 3<>/dev/tcp/localhost/11211; printf "stats/nquit/n" >&3; cat <&3

Para vaciar el caché, use el comando memflush :

echo flush_all >/dev/tcp/localhost/11211

y verifica si las estadísticas aumentan

Para volcar todos los objetos en caché, use el comando memdump (parte del paquete memcached / libmemcached ):

memdump --servers=localhost:11211

Si está utilizando PHP, para ver si es compatible, verifique por: php -i | grep memcached php -i | grep memcached .

Rastreo

Para comprobar qué proceso de memcached está procesando exactamente, puede usar los rastreadores o depuradores de red (por ejemplo, strace en Linux o dtrace / dtruss en Unix / OS X) para eso. Vea algunos ejemplos a continuación.

Strace

sudo strace -e read,write -fp $(pgrep memcached)

Para formatear la salida de una mejor manera, verifique: ¿cómo analizar strace en shell en texto plano?

Dtruss

Dtruss es un contenedor dtrace que está disponible en los sistemas Unix. Ejecútelo como:

sudo dtruss -t read -fp $(pgrep memcached)

Tcpdump

sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10


Escribí un script de expect is-memcached-running que prueba si memcached se está ejecutando en una combinación de host / puerto (ejecutar como is-memcached-running localhost 11211 ):

#! /usr/bin/env expect set timeout 1 set ip [lindex $argv 0] set port [lindex $argv 1] spawn telnet $ip $port expect "Escape character is ''^]''." send stats/r expect "END" send quit/r expect eof

Si ejecuta su sistema desde una regla Makefile , puede hacer que su inicio dependa de un objetivo make que afirme que está activo y en funcionamiento (o le ayuda a obtener ese estado). Es detallado cuando la comprobación no nos facilita la depuración de las ejecuciones fallidas de ci, instalamos memcached cuando falta, y es breve y va al grano de lo contrario:

#! /bin/bash if [[ "$(type -P memcached)" ]]; then echo ''memcached installed; checking if it is running'' memcached_debug=`mktemp memcache-check.XXXXX` if is-memcached-running localhost 11211 >$memcached_debug 2>&1; then echo ''Yep; memcached online'' else cat $memcached_debug echo echo ''****** Error: memcached is not running! ******'' if [[ "$OSTYPE" =~ ^darwin ]]; then echo echo ''Instructions to auto-spawn on login (or just start now) are shown'' echo ''at the end of a "brew install memcached" run (try now, if you did'' echo ''not do so already) or, if you did, after a "brew info memcached".'' echo fi exit 1 fi rm -f $memcached_debug else echo memcached was not found on your system. if [[ "$OSTYPE" =~ ^darwin ]]; then brew install memcached elif [[ "$OSTYPE" =~ ^linux ]]; then sudo apt-get install memcached else exit 1 fi fi


Estoy usando Mezzanine y la única respuesta que funcionó para mí fue la respuesta de Jacobs. Parando el daemon y ejecutando memcached -vv


Memcached puede escribir en un archivo de registro por sí mismo, sin tener que recurrir a reiniciarlo manualmente. El script de inicio /etc/init.d/memcached puede llamar a memcached con las opciones especificadas en /etc/memcached.conf . Entre estas opciones se encuentran la verbosidad y la ruta del archivo de registro.

En resumen, solo necesita agregar (o descomentar) estas dos líneas a /etc/memcached.conf :

-vv logfile /path/to/log

... y reinicie el daemon con el service memcached restart o /etc/init.d/memcached restart

Y luego puede monitorear este registro de la manera tradicional, como tail -f /path/to/log , por ejemplo.


Para ampliar la respuesta de Node, puede usar socat UNIX-CONNECT:/var/run/memcached.sock STDIN para depurar un socket de Unix.

Ejemplo:

$ socat UNIX-CONNECT:/var/run/memcached.sock STDIN stats STAT pid 931 STAT uptime 10 STAT time 1378574384 STAT version 1.4.13 STAT libevent 2.0.19-stable STAT pointer_size 32 STAT rusage_user 0.000000 STAT rusage_system 0.015625 STAT curr_connections 1 STAT total_connections 2 STAT connection_structures 2


Puede probar memcached o cualquier servidor mediante la secuencia de comandos siguiente

lsof -i :11211 | grep ''LISTEN''>/dev/null 2>/dev/null;echo $?

si devuelve 0, entonces el servidor se está ejecutando realmente o si 1 no es así, si desea saber que el servidor se está ejecutando realmente en algún puerto, utilice la siguiente secuencia de comandos

lsof -i :11211 | grep ''LISTEN''>/dev/null 2>/dev/null; if [ $? -eq 0]; then echo "Your memcache server is running" else echo "No its not running" fi


Puede usar telnet y el comando stats, por ejemplo:

# telnet localhost [memcacheport] Trying 127.0.0.1... Connected to localhost. Escape character is ''^]''. stats STAT pid 2239 STAT uptime 10228704 STAT time 1236714928 STAT version 1.2.3 STAT pointer_size 32 STAT rusage_user 2781.185813 STAT rusage_system 2187.764726 STAT curr_items 598669 STAT total_items 31363235 STAT bytes 37540884 STAT curr_connections 131 STAT total_connections 8666 STAT connection_structures 267 STAT cmd_get 27 STAT cmd_set 30694598 STAT get_hits 16 STAT get_misses 11 STAT evictions 0 STAT bytes_read 2346004016 STAT bytes_written 388732988 STAT limit_maxbytes 268435456 STAT threads 4 END


Sé que esta pregunta es antigua, pero este es otro enfoque útil para probar memcached con django:

Como se menciona en @Jacob, puede iniciar memcached en modo muy detallado (no como daemon):

memcached -vv

Para probar su configuración de caché django, puede usar la api de caché de bajo nivel.

  1. Primero, inicie el intérprete de Python y cargue la configuración de su proyecto django:

    python manage.py shell

  2. Desde el shell, puede usar la API de bajo nivel para probar su servidor Memcache:

    from django.core.cache import cache cache.set(''test'', ''test value'')

Si su configuración de caché es correcta, debería ver el resultado en Memcache similar a esto:

<32 set :1:test 0 300 10 >32 STORED


Una forma simple de probar el funcionamiento de Memcache era filtrar una marca de tiempo comentada en cada página que se sirve. Si la marca de tiempo permanecía igual en varias solicitudes a una página, Memcache almacenaba la página en caché.

En la configuración de Django, también configuré el mecanismo de caché para usar un caché de archivos en el sistema de archivos (realmente lento), pero después de tocar las páginas pude ver que había archivos de caché en la ruta del archivo para poder confirmar que el caché era activo en Django.

Usé estos dos pasos para resolver mi problema de almacenamiento en caché. De hecho, no tenía el caché activado correctamente en Django. El método más nuevo para activar el almacenamiento en caché utiliza el middleware ''django.middleware.cache.CacheMiddleware'' (no el middleware con dos piezas de middleware que tienen que ser la primera / última configuración de middleware).


Inicie Memcache no como un daemon pero es normal, así que simplemente ejecute memcached -vv para obtener mucha verbose. Verás cuando los get y los sets ingresan al servidor de memcache.