Dogslow

Szoftver screenshot:
Dogslow
Szoftver adatai:
Változat: 0.9.5
Feltöltés dátuma: 14 Apr 15
Fejlesztő: Erik van Zijst
Engedély: Ingyenes
Népszerűség: 1

Rating: nan/5 (Total Votes: 0)

Dogslow a Django watchdog middleware osztály, amely naplózza tracebacks lassú kéréseket.
Telepítés:
Telepítse dogslow:
pip telepíteni dogslow
Ezután adjunk hozzá, ha a fenti middleware osztályok a Django settings.py fájl:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware",
& Nbsp; ...
)
A legjobb eredmény, hogy ez az egyik első middleware, hogy fut.
Configuration:
Használhatja a következő konfigurációs tulajdonságokat a fájl settings.py, hogy beállítsa a watchdog:
# Watchdog alapértelmezés szerint engedélyezve van, letiltják, False:
DOGSLOW = True
# A hely, ahova Watchdog tárolja a log fájlokat:
DOGSLOW_OUTPUT = '/ tmp'
# Log kérések hosszabb időt vesz igénybe, mint 25 másodperc:
DOGSLOW_TIMER = 25
# Amikor mindkét megadott, e-maileket nyomkövetési:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com "
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com "
Használat:
Minden bejövő HTTP kérést kap egy 25 másodperces időtúllépés a watchdog. Ha a kérelem nem tér vissza ezen idő alatt, a watchdog aktiválja, és vesz egy kandikál a kérést szál köteget, írja a visszakövetést (beleértve az összes helyi stack változók - Django stílus) egy log fájlba.
Minden lassú kérelem bejelentkezett egy külön fájlban, hogy így néz ki:
Undead kérésére fogtak el: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 /? Delay = 2
Menet ID: 140539485042432
Process ID: 18010
Szülő PID: 17762
Megnyitva: 16-05-2011 02:10:10 UTC
& Nbsp; Fájl "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", 107 vonalat, a inner_run
& Nbsp; távon (self.addr, int (self.port), handler, IPv6 = self.use_ipv6)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", sorban 696, a Run
& Nbsp; httpd.serve_forever ()
& Nbsp; fájlba "/usr/lib/python2.7/SocketServer.py", sorban 227, a serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; fájlba "/usr/lib/python2.7/SocketServer.py", a 284, a _handle_request_noblock
& Nbsp; self.process_request (kérésre, client_address)
& Nbsp; fájlba "/usr/lib/python2.7/SocketServer.py", sorban 310, a process_request
& Nbsp; self.finish_request (kérésre, client_address)
& Nbsp; fájlba "/usr/lib/python2.7/SocketServer.py", sorban 323, a finish_request
& Nbsp; self.RequestHandlerClass (kérésre, client_address, self)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", sorban 570, a __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp; fájlba "/usr/lib/python2.7/SocketServer.py", sorban 639, a __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", sorban 615, a fogantyú
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", sorban 283, a Run
& Nbsp; self.result = alkalmazás (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", 68 vonal, a __call__
& Nbsp; visszatérő self.application (környezet, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", sorban 273, a __call__
& Nbsp; reakció = self.get_response (kérésre)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", sorban 111, a get_response
& Nbsp; reakció = callback (kérésre * callback_args, ** callback_kwargs)
& Nbsp; fájlba "/home/erik/work/middleware/middleware/sleep/views.py", 6. sor, alvó
& Nbsp; time.sleep (float (request.GET.get ("késedelem", 1)))
Teljes visszakövetést helyi változók:
& Nbsp; Fájl "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", 107 vonalat, a inner_run
& Nbsp; távon (self.addr, int (self.port), handler, IPv6 = self.use_ipv6)
& Nbsp; ... sok minden ...
A fenti példa azt mutatja, hogy a kérés szál blokkolva volt time.sleep () idején dogslow vette a pillanatkép.
Kéri, hogy térjen vissza, mielőtt dogslow a időtúllépés nem kap bejelentkezve.
Ne feledje, hogy dogslow csak úgy egy kandikál a szál köteget. Ez nem szakítja meg a kérelmet, vagy befolyásolják azt bármely más módon. Segítségével dogslow tehát biztonságosan használható a termelés.
Ellenjavallat
Dogslow használ többszálú. Ebben egyetlen háttérben zajlik a fogantyúkat a watchdog timeout, és úgy tracebacks, hogy az eredeti kérelem szálak nem szakadnak meg. Ez azonban bizonyos következményei.
Többszálas és a GIL
A CPython, a Gil (Global Tolmács Lock) megakadályozza a több szálon végrehajtson Python kódot egyszerre. Csak amikor egy szál kifejezetten engedi a zárat a GIL, lehet egy második menet távon.
Elengedte a GIL automatikusan történik, ha egy Python programot teszi blokkoló hívások kívül a tolmács, például amikor egy IO.
Mert dogslow ez azt jelenti, hogy csak megbízható lehallgatott kéréseket, amelyek lassú, mert ők csinálnak IO, amelyben az alvás, vagy foglalt várja, hogy megszerezzék zárak magukat.
A legtöbb esetben ez rendben van. Egyik fontos oka a lassú Django kérések egy drága adatbázis lekérdezés. Mivel ez IO, dogslow elfoghatja e szép. A forgatókönyv, ahol CPython Gil problematikus, ha a kérelem fonala eltalál egy végtelen ciklusba Python kódot (vagy jogos Python, hogy rendkívül költséges és hosszú időt vesz igénybe, hogy végre), soha nem mentesíti a Gil. Annak ellenére, hogy dogslow a watchdog timer nem lett futható, akkor nem tud bejelentkezni a köteget.
Co-rutinok és Greenlets
Dogslow felhasználásra szánják egy szinkron munkás konfigurációt. A webszerver, amely külön szálon (vagy egyszálú, dedikált dolgozó folyamatok) kiszolgálására kéréseket. Django beépített wsgi szerver ezt, akárcsak Gunicorn az alapértelmezett sync-worker módban.
Amikor fut egy "co-rutinok keret", ahol több kérést szolgálnak egyidejűleg az egyik téma, visszakövetés válhat értelmetlen.

követelmények :

  • Python
  • Django

Más szoftver fejlesztő Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Hozzászólások a Dogslow

Hozzászólás nem található
Megjegyzés hozzáadása
Kapcsolja be a képeket!