2012-01-05 23 views
5

Tengo un sitio web que está siendo servido por nginx y django.memcached ralentiza el sitio web

Mi staging.py contiene correctamente los ajustes de CACHE y middleware. Puede echar un vistazo al nginx.conf y al nginx conf file related to the site. He confirmado que memcached se está ejecutando en ngrep -d any port 11211.

Encendí el almacenamiento en caché para todo el sitio, y quería ver el rendimiento haciendo ab -n 1000 -c 10 http://site.com

activada la caché fuera, me sale:

Concurrency Level:  10 
Time taken for tests: 10.276 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  11695000 bytes 
HTML transferred:  11559000 bytes 
Requests per second: 97.32 [#/sec] (mean) 
Time per request:  102.759 [ms] (mean) 
Time per request:  10.276 [ms] (mean, across all concurrent requests) 
Transfer rate:   1111.43 [Kbytes/sec] received 

está activada la caché, lo entiendo :

Concurrency Level:  10 
Time taken for tests: 12.277 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  11695000 bytes 
HTML transferred:  11559000 bytes 
Requests per second: 81.45 [#/sec] (mean) 
Time per request:  122.771 [ms] (mean) 
Time per request:  12.277 [ms] (mean, across all concurrent requests) 
Transfer rate:   930.26 [Kbytes/sec] received 

Mi sitio web es un blog que extrae mensajes de una base de datos, nada exótico.

Estaría agradecido si alguien pudiera decirme por qué el sitio se está frenando con memcached. ¡Puedes ver que las "Solicitudes por segundo" se reducen cuando uso memcached!

Sin embargo, running memcached-top me dio no hits cuando ejecuté ab (aunque los contadores de lectura y escritura subieron durante la prueba). Tengo memory available y memcached es not hogging de memoria.

EDITAR
me corrieron memcached -vv y tiene some results. Puede ver que el memcached imprime un "ALMACENADO" la primera vez, y luego no parece enviarlo desde el caché (no estoy seguro de esto). Ahora estoy aún más confundido. Quizás el memcached & la interfaz django está funcionando, pero el resultado final es que es mejor no ejecutar memcached?

+0

http://pastebin.com/sAksJTar vuelve puesto como desconocido – ReadWriteCode

+0

siento .. nuevos enlaces deben funcionar ahora. – Trewq

+1

No estoy seguro de cuál es exactamente el problema aquí. ¿Intentó ver la tasa de aciertos de la caché? Pensé que sería una buena idea compartir mintcache con usted. http://djangosnippets.org/snippets/155/ –

Respuesta

1

Trewq, muchas cosas diferentes podrían estar saliendo mal. Dijiste que tu máquina no está buscando pero que las solicitudes no vuelven aunque Memcache ALMACENÓ el resultado.

Mis teorías: demasiado corto de los tiempos de espera, mal conductor, y el arco de la CPU posiblemente mal (x86 vs _64)

Tiempos de espera

lo general, en la salida -vs (podría ser -vvv) la línea SET se tiene sintaxis como comando, clave, valor y tiempo de espera. Un tiempo de espera muy pequeño puede ser el problema con el almacenamiento de Memcache y luego casi inmediatamente vaciando el valor.

< nombre del comando> < tecla> < banderas> < EXPTIME> < bytes> [noreply] \ r \ n - https://github.com/memcached/memcached/blob/master/doc/protocol.txt

conductor

Además, puede haber un problema con el controlador memcache/api que estás usando como mc nunca debería bloquear tanto tiempo. Puede verificar su estado de servicio Memcache haciendo algo como esto http://code.google.com/p/memcached/wiki/NewConfiguringServer#Inspecting_Running_Configuration antes y después de ejecutar una ejecución de bechmark.

auditoría clave

Hace un tiempo escribí el guión en esta pregunta Setting smaller buffer size for sys.stdin? para auditar la salida de -vs Memcache para ver cómo eran Obtiene equilibrada a los conjuntos. Ha pasado un tiempo, pero creo que podría ser útil para ti con algunas correcciones.

No se menciona en el wiki para stat pero hay valores de estadística para ayudar a determinar si su caché es equilibrada - https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L409

ideales Super es 9/10 solicitudes son golpes a 1 señorita, la realidad es más probable 6/10 visitas a solicitudes, y todo lo que esté por debajo del 60% está desperdiciando memoria.

+0

Estoy de acuerdo: en un mundo perfecto, tu índice de aciertos sería del 90% o más. ¿Pero puede corroborar su afirmación de que el porcentaje de aciertos del 60% es el umbral de la utilidad? ¿O es una cúspide subjetiva basada en la experiencia personal? –

+0

@Chris: Experiencia de personal con un cliente que tenía unas pocas matrices de 12 GB y manejaba entre 14 y 15 millones de páginas vistas en un día de 16 horas de "Internet". Cuando su ratio de aciertos/faltas es inferior al 60% para un entorno HLA, este es un signo de incrustación de claves que sugiere que esté atornillando a algún usuario en algún lugar (servicio degradado/lento). Además de mi guión python, un buen amigo mío escribió esto https : //github.com/nerdynick/MemcachedManager aunque una palabra de advertencia no sé si es estable. – David

+0

@Chris - Casi lo olvido. Otro culpable de sub. 60% es muy corto de los tiempos de caducidad. Mi enfoque suele tener un archivo de configuración central con una lista de tiempos de caducidad desglosados ​​por categoría (global, módulo, todos los usuarios, algunos usuarios, usuario único) y para comenzar todo está configurado para caducar un año en el futuro. – David