Dogslow

Software captura de pantalla:
Dogslow
Detalles de software:
Versión: 0.9.5
Fecha de carga: 14 Apr 15
Promotor: Erik van Zijst
Licencia: Libre
Popularidad: 1

Rating: nan/5 (Total Votes: 0)

Dogslow es Django clase middleware de vigilancia que registra seguimientos de las solicitudes lentas.
Instalación:
Instale dogslow:
PIP instalar dogslow
A continuación, agregue si a tu lista de clases de middleware en el archivo settings.py Django:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware ',
& Nbsp; ...
)
Para obtener los mejores resultados, lo convierten en uno de los primeros middleware que se ejecutan.
Configuración:
Puede utilizar las siguientes propiedades de configuración en su archivo settings.py para sintonizar el organismo de control:
# Watchdog está activado por defecto, para desactivar temporalmente, se establece en False:
DOGSLOW = True
# Lugar donde Watchdog almacena sus archivos de registro:
DOGSLOW_OUTPUT = '/ tmp'
Peticiones # Login toman más de 25 segundos:
DOGSLOW_TIMER = 25
# Cuando tanto especificados, correos electrónicos trazas inversas:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Uso:
Cada petición HTTP entrante consigue un segundo tiempo de espera de 25 en el organismo de control. Si la solicitud no vuelve dentro de ese tiempo, el organismo de control se activa y se asome a pila la solicitud de hilo y escribe la traza (incluyendo todas las variables de pila locales - estilo Django) a un archivo de registro.
Cada solicitud lento se registra en un archivo separado que tiene este aspecto:
Solicitud Undead interceptado en: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 / delay = 2
ID Tema: 140539485042432
Proceso ID: 18010
PID Padres: 17762
Iniciado: 16-05-2011 02:10:10 UTC
& Nbsp; Archivo "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", línea 107, en inner_run
& Nbsp; run (self.addr, int (self.port), manipulador, ipv6 = self.use_ipv6)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", línea 696, en el plazo
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", línea 227, en serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", línea 284, en _handle_request_noblock
& Nbsp; self.process_request (solicitud, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", línea 310, en process_request
& Nbsp; self.finish_request (solicitud, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", línea 323, en finish_request
& Nbsp; self.RequestHandlerClass (solicitud, client_address, auto)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", línea 570, en __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", línea 639, en __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", línea 615, en el mango
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", línea 283, en el plazo
& Nbsp; self.result = aplicación (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", línea 68, en __call__
& Nbsp; retorno self.application (entorno, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", línea 273, en __call__
& Nbsp; de respuesta = self.get_response (petición)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", línea 111, en GET RESPONSE
& Nbsp; de respuesta = devolución de llamada (request, * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", línea 6, en el sueño
& Nbsp; time.sleep (float (request.GET.get ('retraso', 1)))
Traza completa con las variables locales:
& Nbsp; Archivo "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", línea 107, en inner_run
& Nbsp; run (self.addr, int (self.port), manipulador, ipv6 = self.use_ipv6)
& Nbsp; ... cargas más ...
El ejemplo anterior muestra que el hilo de petición fue bloqueado en time.sleep () en el momento dogslow tomó la instantánea.
Las solicitudes que devuelven antes de tiempo de espera de dogslow expira no queden registradas.
Tenga en cuenta que dogslow sólo se asome a la pila del subproceso. No interrumpe la solicitud, o influir de cualquier otra manera. Usando dogslow por lo tanto, es seguro de usar en la producción.
Advertencias
Dogslow usa multithreading. Tiene un solo fondo enhebrar las asas los tiempos de espera de vigilancia y toma las trazas de retorno, por lo que los hilos solicitud original no se interrumpan. Esto tiene algunas consecuencias.
Multithreading y el GIL
En CPython, el GIL (Global Interpreter Lock) previene múltiples hilos de ejecución de código Python simultáneamente. Sólo cuando un hilo libera expresamente su bloqueo en el GIL, ¿puede una segunda pasada de rosca.
Al soltar el GIL se realiza de forma automática cada vez que un programa de Python hace que el bloqueo de llamadas fuera del intérprete, por ejemplo cuando se hace IO.
Para dogslow esto significa que sólo puede fiable interceptar las peticiones que son lentos porque están haciendo IO, llamando sueño u ocupado esperando para adquirir propios bloqueos.
En la mayoría de los casos esto está muy bien. Una causa importante de solicitudes de Django lentos es una consulta de base de datos caro. Como se trata de IO, dogslow puede interceptar los bien. Un escenario en el GIL de CPython es problemático es cuando el hilo de la petición realiza un bucle infinito en el código Python (Python o legítimo que es extremadamente caro y lleva mucho tiempo en ejecutarse), nunca soltar el GIL. Aunque temporizador de vigilancia de dogslow llega a ser ejecutable, no se puede registrar la pila.
Co-rutinas y Verdecillo
Dogslow es para uso en una configuración trabajador síncrona. Un servidor web que utiliza hilos dedicados (o procesos de trabajo de un único subproceso, dedicados) para servir peticiones. Servidor WSGI incorporada de Django hace esto, al igual que Gunicorn en su modo por defecto de sincronización de trabajo.
Cuando se ejecuta con un "marco de co-rutinas" donde se sirven varias solicitudes al mismo tiempo por un hilo, trazas podrían llegar a ser sin sentido

Requisitos :.

  • Python
  • Django

Otro software de desarrollador Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Comentarios a la Dogslow

Comentarios que no se encuentran
Añadir comentario
A su vez en las imágenes!