Estoy probando el uso de memcached para almacenar en caché las vistas de django. ¿Cómo puedo saber si Memcached está almacenando en caché algo desde la línea de comandos de Linux?
django
memcached
django-cache
MikeN
fuente
fuente
Puede usar el script oficial de Perl:
memcached-tool 127.0.0.1:11211 stats
O simplemente use 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
fuente
memcached-tool 127.0.0.1:11211 stats
- no es necesario hacer telnet./usr/share/memcached/scripts/memcached-tool
./usr/share/memcached/scripts/memcached-tool /tmp/memcached.sock stats
o/usr/share/memcached/scripts/memcached-tool /var/run/memcached/memcached.sock stats
(caso de enchufe)Inicie Memcache no como un demonio, sino de forma normal, así que simplemente ejecute
memcached -vv
para muy detallado. Verá cuando los get y los conjuntos ingresan al servidor de Memcache.fuente
Una forma sencilla de probar el funcionamiento de Memcache era introducir una marca de tiempo comentada en cada página servida. Si la marca de tiempo se mantuvo igual en varias solicitudes a una página, Memcache estaba almacenando 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 acceder a las páginas, pude ver que se estaban colocando archivos de caché reales en la ruta del archivo para poder confirmar que el almacenamiento en caché era activo en Django.
Usé estos dos pasos para resolver mi problema de almacenamiento en caché. De hecho, no tenía el almacenamiento en caché activado correctamente en Django. El método más nuevo para activar el almacenamiento en caché es usar el middleware 'django.middleware.cache.CacheMiddleware' (no el middleware con dos piezas de middleware que deben ser la primera / última configuración de middleware).
fuente
Memcached puede escribir en un archivo de registro por sí solo, sin tener que recurrir a reiniciarlo manualmente. El
/etc/init.d/memcached
script de inicio (/usr/lib/systemd/system/memcached.service
en EL7 +; ugh) puede llamar a memcached con las opciones especificadas en/etc/memcached.conf
(o/etc/sysconfig/memcached
en EL5 +). 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 ese archivo conf / sysconfig ...
-vv logfile /path/to/log
... y reinicia el demonio con
service memcached restart
(EL3-7) o/etc/init.d/memcached restart
(debuntus)Y luego puede monitorear este registro de la manera tradicional, como
tail -f /path/to/log
, por ejemplo.fuente
Desde la línea de comando, pruebe el siguiente 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 recuentos de aciertos y errores)
El artículo de referencia está aquí, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/
Para ver cambios cada 2 segundos:
watch "echo stats | nc 127.0.0.1 11211"
fuente
subprocess.Popen('echo stats | nc 127.0.0.1 11211', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
Para extender la respuesta de Node, puede usar
socat UNIX-CONNECT:/var/run/memcached.sock STDIN
para depurar un socket 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
fuente
En Bash, puede verificar las estadísticas de Memcache con este comando:
exec 3<>/dev/tcp/localhost/11211; printf "stats\nquit\n" >&3; cat <&3
Para vaciar la caché, use el
memflush
comando:echo flush_all >/dev/tcp/localhost/11211
y compruebe si las estadísticas aumentaron.
Para volcar todos los objetos almacenados en caché, use
memdump
ormemcdump
command (parte dememcached
/libmemcached
package):memcdump --servers=localhost:11211
o:
memdump --servers=localhost:11211
Si está usando PHP, para ver si es compatible, compruebe por:
php -i | grep memcached
.Rastreo
Para comprobar qué proceso de memcached está procesando exactamente, puede utilizar rastreadores de red o depuradores (por ejemplo,
strace
en Linux odtrace
/dtruss
en Unix / OS X) para eso. Consulte algunos ejemplos a continuación.Strace
sudo strace -e read,write -fp $(pgrep memcached)
Para formatear la salida de una mejor manera, consulte: ¿Cómo analizar strace en shell en texto sin formato?
Dtruss
Dtruss es un contenedor de dtrace que está disponible en sistemas Unix. Ejecútelo como:
sudo dtruss -t read -fp $(pgrep memcached)
Tcpdump
sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
fuente
yum install memdump
y fallé.memdump
es parte dememcached
(olibmemcached
), a fin de tratar:yum install memcached
.memcdump
.Puede probar Memcached o cualquier servidor mediante el siguiente script
lsof -i :11211 | grep 'LISTEN'>/dev/null 2>/dev/null;echo $?
si devuelve 0, entonces el servidor realmente se está ejecutando o si 1 no es así si desea saber que el servidor realmente se está ejecutando en algún puerto, use el siguiente script
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
fuente
¿Puedes usar curl para buscar una página unos cientos de veces y cronometrar los resultados? También puede considerar ejecutar un proceso en el servidor que simule una gran carga de CPU / disco mientras hace esto.
fuente
Escribí un
expect
scriptis-memcached-running
que prueba si memcached se está ejecutando en una combinación de host / puerto (ejecutar comois-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
Makefile
regla, puede hacer que su inicio dependa de un objetivo de marca que afirma que está en funcionamiento (o lo ayuda a obtener ese estado). Es detallado cuando la verificación no nos facilita la depuración de ejecuciones de ci fallidas, instala 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
fuente
Siguiendo 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(f"echo stats | nc 127.0.0.1 {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[-1] print(f"[MemCached] pid {pid} Running on port {port}") else: raise RuntimeError(f"No Memcached is present on port {port}")
fuente
Estoy usando Mezzanine y la única respuesta que funcionó para mí fue la respuesta de Jacobs. Así que parando el demonio y corriendo
memcached -vv
fuente