Dogslow

Screenshot Software:
Dogslow
Mga detalye ng Software:
Bersyon: 0.9.5
I-upload ang petsa: 14 Apr 15
Nag-develop: Erik van Zijst
Lisensya: Libre
Katanyagan: 1

Rating: nan/5 (Total Votes: 0)

Dogslow ay Django asong tagapagbantay middleware klase na magla-log tracebacks ng mabagal na mga kahilingan.
Pag-install:
I-install ang dogslow:
buto ng bungang-kahoy-install dogslow
Pagkatapos ay idagdag kung sa iyong listahan ng middleware mga klase sa iyong Django settings.py file:
MIDDLEWARE_CLASSES = (
& Nbsp; 'dogslow.WatchdogMiddleware',
& Nbsp; ...
)
Para sa pinakamahusay na mga resulta, gawin itong isa sa mga unang middlewares na tumakbo.
Configuration:
Maaari mong gamitin ang mga sumusunod na katangian ng configuration sa iyong settings.py file upang ibagay ang mga asong tagapagbantay:
# Asong tagapagbantay ay pinagana sa pamamagitan ng default, upang pansamantalang huwag paganahin, nakatakda sa False:
DOGSLOW = True
# Location kung saan iniimbak ng asong tagapagbantay nito file ng log:
DOGSLOW_OUTPUT = '/ tmp'
Mga kahilingan # Log mas matagal kaysa sa 25 segundo:
DOGSLOW_TIMER = 25
# Kapag pareho tinukoy, ang mga email backtraces:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Paggamit:
Nakakakuha bawat papasok na kahilingan ng HTTP 25 segundo timeout sa asong tagapagbantay. Kung ang isang kahilingan ay hindi bumalik sa loob ng panahon na iyon, ang pagiging aktibo ng asong tagapagbantay at tumatagal ng isang silip sa stack ang kahilingan thread at nagsusulat ng mga backtrace (kabilang ang lahat ng lokal na mga variable stack - estilo Django) sa isang log file.
Ang bawat mabagal kahilingan ay naka-log sa isang hiwalay na file na ganito ang hitsura:
Naharang Undead kahilingan sa: 16-05-2011 02:10:12 UTC
GET http: // localhost:? 8000 / pagkaantala = 2
Thread ID: 140539485042432
Proseso ng ID: 18010
PID Magulang: 17762
Nagsimula: 16-05-2011 02:10:10 UTC
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", 107 linya, sa inner_run
& Nbsp; run (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", 696 linya, sa pagtakbo
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", 227 linya, sa serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", 284 linya, sa _handle_request_noblock
& Nbsp; self.process_request (kahilingan, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", 310 linya, sa process_request
& Nbsp; self.finish_request (kahilingan, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", 323 linya, sa finish_request
& Nbsp; self.RequestHandlerClass (kahilingan, client_address, sa sarili)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", 570 linya, sa __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (sa sarili, * args, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", 639 linya, sa __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", 615 linya, sa handle
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", 283 linya, sa pagtakbo
& Nbsp; self.result = application (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", 68 linya, sa __call__
& Nbsp; return self.application (ilagay sa kapaligiran, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", 273 linya, sa __call__
& Nbsp; pagtugon = self.get_response (kahilingan)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", 111 linya, sa get_response
& Nbsp; pagtugon = callback (kahilingan, * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", 6 linya, sa pagtulog
& Nbsp; time.sleep (float (request.GET.get ('pagkaantala', 1)))
Buong backtrace sa mga lokal na mga variable:
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", 107 linya, sa inner_run
& Nbsp; run (self.addr, int (self.port), handler, IPv6 = self.use_ipv6)
& Nbsp; ... naglo-load nang higit pa ...
Ang halimbawa sa itaas ay nagpapakita na ang kahilingan thread ay na-block sa time.sleep () sa oras dogslow kinuha ang snapshot nito.
Mga Kahilingan na nagbabalik bago timeout dogslow ng mag-expire ang hindi makapag-log ko.
Tandaan tumatagal lamang na dogslow sumilip sa stack ang thread na iyon. Hindi ito makakagambala ang kahilingan, o maka-impluwensya ito sa anumang iba pang paraan. Paggamit ng dogslow ay samakatuwid ligtas gamitin sa produksyon.
Caveats
Dogslow gumagamit ng multithreading. Mayroon itong thread ng isang solong background ang mga handle ang asong tagapagbantay timeout at tumatagal ang tracebacks, upang ang orihinal na mga thread kahilingan ay hindi nagambala. Ito ay may ilang mga kahihinatnan.
Multithreading at ang Gil
Sa cPython, pinipigilan ang Gil (Global Interpreter Lock) maramihang mga thread mula sa pagpapatupad Python code nang sabay-sabay. Lamang kapag ang isang thread tahasang Release lock nito sa Gil, maaari isang pangalawang run thread.
At bitawan ang Gil ay awtomatikong nagagawa tuwing may programa Python gumagawa ng pag-block ng mga tawag sa labas ng interpreter, halimbawa kapag ang paggawa IO.
Para sa dogslow nangangahulugan ito na maaari nang mapagkakatiwlaan lamang harangin ang mga kahilingan na mabagal dahil ang mga ito ang ginagawa ng IO, pagtawag sa pagtulog o abala ng paghihintay upang makakuha ng mga kandado sa kanilang sarili.
Sa karamihan ng mga kaso na ito ay multa. Isang mahalagang dahilan ng mabagal na mga kahilingan Django ay isang mamahaling query sa database. Dahil ito ay IO, dogslow maaaring harangin ang mga multa. Isang sitwasyon kung saan cPython ni Gil ay may problemang ay kapag umabot sa thread ang kahilingan ng isang walang-katapusang loop sa Python code (o lehitimong Python na lubhang mahal at tumatagal ng mahabang panahon upang isakatuparan), hindi kailanman bitawan ang Gil. Kahit na ang timer asong tagapagbantay dogslow ni ay naging runnable, hindi ito maaaring mag-log ng stack.
Co-gawain at Greenlets
Dogslow ay nilayon para sa paggamit sa isang hindi sabaysabay na configuration ng manggagawa. Ang isang webserver na gumagamit ng nakalaang thread (o single-may sinulid, nakalaang proseso manggagawa) upang maghatid ng mga kahilingan. Ang built-in na wsgi server Django ng ito, pati na ang Gunicorn sa sarili default na pag-sync sa trabaho mode.
Kapag nagpapatakbo ng isang "co-gawain framework" kung saan maraming kahilingan Hinahain Kasabay ng isang thread, backtraces maaaring maging walang saysay

Mga Kinakailangan :.

  • Python
  • Django

Iba pang mga software developer ng Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Mga komento sa Dogslow

Mga Komento hindi natagpuan
Magdagdag ng komento
I-sa mga imahe!