Estoy probando el uso de memcached para la caché de django vistas. ¿Cómo puedo saber si memcached es en realidad la caché de cualquier cosa, desde la línea de comandos de Linux?

InformationsquelleAutor MikeN | 2009-03-10

13 Comentarios

  1. 43

    Sé que esta pregunta es viejo, pero aquí es otro enfoque útil para las pruebas de memcached con django:

    Como @Jacob mencionó, usted puede comenzar a memcached en muy detallado el modo de (no como un demonio):

    memcached -vv

    A prueba su django caché de configuración, puede utilizar el bajo nivel de la api de caché.

    1. Primero, inicie el intérprete de python y la carga en django configuración del proyecto:

      python manage.py shell
    2. A partir de la cáscara, puede utilizar el bajo nivel de la api de caché para probar su servidor memcache:

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

    Si la caché de configuración es correcta, usted debe ver la salida en memcache similar a este:

    <32 set :1:test 0 300 10
    >32 STORED
    • También vale la pena señalar que usted necesita para detener la ejecución ya memcache instancia antes de ejecutar memcached-vv, de lo Contrario tendrá dos instancias en ejecución y django todavía será la configuración de la memoria caché en la primera.
    • Gracias por la explicación detallada, esto se explica cómo comprobar la memoria caché si no ya sabemos cómo funciona
    • Este es el más rápido y más fiable para evaluar si memcached está trabajando. Debe ser aceptado respuesta.
  2. 42

    Usted podría utilizar 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
    • memcached-tool 127.0.0.1:11211 stats – usted no necesita telnet.
    • ^^ Este comentario es la manera correcta para la prueba de memcached. Yo uso este para probar la conectividad a mi control remoto de memcached grupos.
    • Me encontré con que el comando y se muestran algunas textos al azar, ¿cómo podemos confirmar que memcache se está ejecutando..
    • Para cualquier persona que lucha por encontrar memcached-herramienta – en ubuntu es /usr/share/memcached/scripts/memcached-tool.
    • Y si se conecta a través de un socket, intente /usr/share/memcached/scripts/memcached-tool /var/run/memcached/memcached.sock stats
  3. 42

    Inicio memcache no como un demonio, pero normal, por lo que sólo tiene que ejecutar memcached -vv muy detallado. Verás cuando obtenga los juegos vienen en el servidor memcache.

  4. 10

    Manera Simple para la prueba de memcache de trabajo estuvo de colarse en un comentario de marca de tiempo en cada página que se sirve. Si la marca de tiempo mantuvo la misma en múltiples peticiones a una página, la página se almacena en caché por memcache.

    En Django, yo también la configuración de la caché mecanismo para utilizar un archivo de caché en el sistema de archivos (muy lento), pero después de golpear las páginas pude ver que no eran reales archivos de caché de ser colocado en la ruta de acceso del archivo para que yo pudiera confirmar el caché activa en Django.

    He utilizado tanto estos pasos para solucionar mi problema de almacenamiento en caché. Yo realmente no tenía activada la caché correctamente en Django. El nuevo método para activar el almacenamiento en caché es el uso de la ‘django.middleware.la memoria caché.CacheMiddleware de middleware (no el middleware con dos middleware de piezas que tiene que ser el primero/último middleware de configuración).

  5. 6

    Memcached puede escribir en un archivo de registro en su cuenta, sin tener que recurrir a reiniciar manualmente. El /etc/init.d/memcached script de init (/usr/lib/systemd/system/memcached.service en EL7+; ugh) se puede llamar a memcached con las opciones especificadas en /etc/memcached.conf (o /etc/sysconfig/memcached en EL5+). Entre estas opciones son verbosidad y la ruta del archivo de registro.

    En definitiva, sólo se necesita añadir (o elimine) estas dos líneas para que conf/sysconfig archivo…

    -vv
    logfile /path/to/log

    …y reiniciar el demonio con service memcached restart(EL3-7) o /etc/init.d/memcached restart(debuntus)

    Y, a continuación, usted puede controlar este registro en la forma tradicional, como tail -f /path/to/log, por ejemplo.

  6. 4

    Para extender Nodo de la respuesta, puede utilizar 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
  7. 3

    Puede probar memcached o cualquier servidor mediante el siguiente script

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

    si devuelve 0, a continuación, el servidor está ejecutando o si 1 no es tan si usted quiere saber que el servidor se está ejecutando 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
  8. 3

    En Bash, puede consultar las estadísticas de memcache por este comando:

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

    Para vaciar la caché, utilice memflush comando:

    echo flush_all >/dev/tcp/localhost/11211

    y comprobar si las estadísticas mayor.

    Para el volcado de todos los objetos almacenados en la caché, utilice memdump o memcdump comando (parte de memcached/libmemcached paquete):

    memcdump --servers=localhost:11211

    o:

    memdump --servers=localhost:11211

    Si estás usando PHP, para ver si es compatible, compruebe por: php -i | grep memcached.


    Seguimiento

    Para comprobar lo que memcached proceso es exactamente el procesamiento, puede utilizar rastreadores de red o depuradores (por ejemplo, strace en Linux o dtrace/dtruss en Unix/mac OS X) para que. Vea algunos ejemplos a continuación.

    Strace

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

    Para dar formato a la salida de una mejor manera, de verificación: Cómo analizar strace en shell en texto plano?

    Dtruss

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

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

    Tcpdump

    sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
    • El paquete que ofrece memdump? Traté de yum install memdump y que no se pudo.
    • Creo memdump es parte de memcached (o libmemcached), así que trate de: yum install memcached.
    • a qué te refieres memcdump?
    • En algunos sistemas puede ser llamado memcdump.
  9. 1

    Puede usar curl para obtener una página de un par de cientos de veces y de momento los resultados? También se puede ver ejecutando un proceso en el servidor que simula mucha CPU/carga de disco mientras se hace esto.

  10. 1

    Escribí un expect script is-memcached-running que las pruebas si memcached se ejecuta en un host/puerto de combinación (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 ejecutar el sistema desde un Makefile regla, puede hacer que su inicio depende de un destino que afirma que está en marcha y funcionando (o ayuda a recuperar ese estado). Es detallado cuando falla la comprobación de que sea fácil para nosotros para depurar el error de ci se ejecuta, instala memcached cuando hace falta, y es breve y al punto 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
  11. 1

    Desde la línea de comandos, pruebe el siguiente comando

    echo stats | nc 127.0.0.1 11211*

    Si no devuelve nada, memcache no se está ejecutando. De lo contrario, se debe devolver un montón de estadísticas, incluyendo el tiempo de actividad (y hit and miss cuenta)

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

    • simple y claro, su gran meterlo dentro de código de python como subprocess.Popen('echo stats | nc 127.0.0.1 11211', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
  12. 0

    Estoy usando el Entresuelo y la única respuesta que trabajó para mí fue Jacobs respuesta. Para detener el demonio y la ejecución memcached -vv

    • Considere la posibilidad de comenting en la respuesta original o simplemente votar por la respuesta que trabajó para usted
  13. 0

    Siguientes Aryashree post, esto me ayudó a obtener un error si memcached no se ejecuta de forma local:

    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)

Dejar respuesta

Please enter your comment!
Please enter your name here