Dogslow

Screenshot Software:
Dogslow
Szczegóły programowe:
Wersja: 0.9.5
Filmu: 14 Apr 15
Wywoływacz: Erik van Zijst
Licencja: Wolny
Popularność: 62

Rating: 3.5/5 (Total Votes: 2)

Dogslow jest Django klasy middleware, które rejestruje watchdoga o wolnych wniosków tracebacks.
Instalacja:
Zainstaluj dogslow:
pip install dogslow
Następnie dodać, jeśli do listy klas middleware w pliku settings.py Django:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware",
& Nbsp; ...
)
Aby uzyskać najlepsze wyniki, że jest to jeden z pierwszych middleware, że jest prowadzone.
Konfiguracja:
Możesz używać następujących właściwości konfiguracyjne w pliku settings.py do melodii alarmowego:
# Watchdog jest domyślnie włączona, aby tymczasowo wyłączyć, ustawić na False:
DOGSLOW = True
# Miejsce, w którym Watchdog przechowywania plików dziennika:
DOGSLOW_OUTPUT = "/ tmp"
Wnioski # Zaloguj trwa dłużej niż 25 sekund:
DOGSLOW_TIMER = 25
# Gdy oba wymienione, emaile backtrace:
DOGSLOW_EMAIL_TO = "errors@atlassian.com"
DOGSLOW_EMAIL_FROM = "no-reply@atlassian.com"
Sposób użycia:
Każde przychodzące żądanie HTTP dostaje 25 sekund czas oczekiwania na strażnika. Jeżeli wniosek nie wrócić w tym czasie, watchdog aktywuje i zajmuje okiem na stos wniosek wątku i zapisuje ślad (w tym wszystkich zmiennych lokalnych stosu - stylu Django) do pliku dziennika.
Każdy wniosek jest rejestrowany wolno w oddzielnym pliku, który wygląda tak:
Nieumarli wniosek przechwycone w: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 / opóźnienie = 2
Identyfikator wątku: 140539485042432
Identyfikator procesu: 18010
Dominująca PID: 17762
Rozpoczął: 16-05-2011 02:10:10 UTC
& Nbsp; pliku "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", Linia 107 w inner_run
& Nbsp; run (self.addr, int (self.port), obsługi IPv6 = self.use_ipv6)
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linia 696, w perspektywie
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linia 227, w serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linia 284, w _handle_request_noblock
& Nbsp; self.process_request (wniosek, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linia 310, w process_request
& Nbsp; self.finish_request (wniosek, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linia 323, w finish_request
& Nbsp; self.RequestHandlerClass (wniosek, client_address, self)
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linia 570, w __init__
& Nbsp; BaseHTTPRequestHandler .__ startowych __ (self, * args, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linia 639, w __init__
& Nbsp; self.handle ()
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linia 615, uchwyt
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linia 283, w perspektywie
& Nbsp; self.result = aplikacji (self.environ, self.start_response)
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", linia 68, w __call__
& Nbsp; return self.application (environ, start_response)
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", linia 273, w __call__
& Nbsp; odpowiedzi = self.get_response (wniosek)
& Nbsp; Plik "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", linia 111, w GET RESPONSE
& Nbsp; odpowiedzi = zwrotna (żądanie, * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", wiersz 6, w czasie snu
& Nbsp; time.sleep (float (request.GET.get ("opóźnienie", 1)))
Pełna ślad czynności z zmiennych lokalnych:
& Nbsp; pliku "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", Linia 107 w inner_run
& Nbsp; run (self.addr, int (self.port), obsługi IPv6 = self.use_ipv6)
& Nbsp; ... więcej ładunków ...
Powyższy przykład pokazuje, że wątek wniosek został zablokowany w time.sleep () w momencie dogslow miała swoje zdjęcie.
Wnioski, które zwracają przed Timeout dogslow wygasa nie były logowane.
Należy pamiętać, że dogslow zajmuje tylko okiem na stosie w wątku. Nie przerwać żądanie lub wpływać w jakikolwiek inny sposób. Stosując dogslow więc należy zastosować w produkcji.
Ostrzeżenia
Dogslow wykorzystuje wielowątkowość. Posiada pojedyncze tle wątku uchwyty limity czasu strażniczych i podejmuje tracebacks, tak, że Wniosek wątki nie są przerywane. Ma to wpływ.
Wielowątkowość i GIL
W CPython, GIL (Global Interpreter Lock) zapobiega wielu wątków z wykonaniem kodu Pythona jednocześnie. Tylko wtedy, gdy wątek wyraźnie uwalnia blokadę GIL, może drugi prowadzony wątek.
Zwolnienie GIL odbywa się automatycznie, gdy program Python sprawia blokowanie połączeń poza tłumacza, na przykład, gdy robi IO.
Dla dogslow oznacza to, że może w sposób wiarygodny jedynie przechwytywać wniosków, które są wolne, ponieważ robią IO, nazywając snu lub zajęty czeka nabyć same zamki.
W większości przypadków jest to w porządku. Ważną przyczyną wolnych wniosków Django jest drogie zapytanie do bazy danych. Ponieważ jest IO, dogslow może przechwytywać osoby dobrze. Scenariusz, w którym CPython za GIL jest problematyczne jest, gdy wątek wniosek trafi nieskończoną pętlę w Pythonie (lub uzasadnionego Pythonie, które jest bardzo drogie i zajmuje dużo czasu, aby wykonać), nie zwalniając GIL. Nawet jeśli dogslow za watchdog nie stać działać, to nie może się zalogować na stos.
Co-procedury i Greenlets
Dogslow jest przeznaczony do zastosowania w konfiguracji synchronicznego pracującego. Serwer WWW, który wykorzystuje wątki dedykowane (lub pojedyncze gwintowane, dedykowane procesy robocze) do obsługi żądań. Wbudowany serwer WSGI Django robi to, co robi Gunicorn w domyślnym trybie synchronizacji-pracowników.
Podczas pracy z "co-rutyny ramach" gdzie wiele żądań jednocześnie podawane są przez jednego wątku, może stać się bezsensowne backtrace

Wymagania .

  • Python
  • Django

Inne programy z deweloperem Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Komentarze do Dogslow

Komentarze nie znaleziono
Dodaj komentarz
Włącz zdjęć!