Dogslow

Screenshot Λογισμικό:
Dogslow
Στοιχεία Λογισμικού:
Εκδοχή: 0.9.5
Ανεβάστε ημερομηνία: 14 Apr 15
Προγραμματιστής: Erik van Zijst
Άδεια: Δωρεάν
Δημοτικότητα: 1

Rating: nan/5 (Total Votes: 0)

Dogslow είναι Django κατηγορία φύλακα middleware που καταγράφει tracebacks αργή αιτήσεων.
Εγκατάσταση:
Εγκατάσταση dogslow:
Pip εγκαταστήσετε dogslow
Στη συνέχεια, προσθέστε αν στη λίστα των κατηγοριών middleware σε Django αρχείο settings.py σας:
MIDDLEWARE_CLASSES = (
& Nbsp? 'Dogslow.WatchdogMiddleware »,
& Nbsp? ...
)
Για καλύτερα αποτελέσματα, το ένα από τα πρώτα middlewares που εκτελείται κάνουν.
Διαμόρφωση:
Μπορείτε να χρησιμοποιήσετε τις ακόλουθες ιδιότητες διαμόρφωσης στο αρχείο settings.py σας για να συντονίσετε το φύλακα:
# Watchdog είναι ενεργοποιημένη από προεπιλογή, για να απενεργοποιήσετε προσωρινά, οριστεί σε False:
DOGSLOW = True
# Τοποθεσία όπου Φύλακας αποθηκεύει τα αρχεία καταγραφής του:
DOGSLOW_OUTPUT = "/ tmp"
Αιτήσεις # Σύνδεση διαρκεί περισσότερο από 25 δευτερόλεπτα:
DOGSLOW_TIMER = 25
# Όταν και οι δύο προσδιορίζονται, τα μηνύματα ηλεκτρονικού ταχυδρομείου backtraces:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com »
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com »
Χρήση:
Κάθε εισερχόμενη αίτηση HTTP παίρνει 25 δευτερολέπτων στο watchdog. Εάν η αίτηση δεν επιστρέψει εντός αυτής της προθεσμίας, ο φύλακας ενεργοποιεί και λαμβάνει μια ματιά στο stack του το νήμα αίτημα και γράφει το backtrace (περιλαμβανομένων όλων των τοπικών μεταβλητών στοίβα - Django στυλ) σε ένα αρχείο καταγραφής.
Κάθε αργή αίτημα καταγράφεται σε ξεχωριστό αρχείο που μοιάζει με αυτό:
Undead αίτημα υποκλαπούν σε: 16-05-2011 2:10:12 UTC
GET http: // localhost: 8000 / καθυστέρηση = 2
Θέμα ID: 140539485042432
Αναγνωριστικό διαδικασίας: 18010
Μητρική PID: 17762
Ξεκινώντας: 16-05-2011 2:10:10 UTC
& Nbsp? Αρχείου "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", γραμμή 107, σε inner_run
& Nbsp? Τρέξιμο (self.addr, int (self.port), χειριστής, IPv6 = self.use_ipv6)
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", γραμμή 696, στο τρέξιμο
& Nbsp? Httpd.serve_forever ()
& Nbsp? Αρχείο "/usr/lib/python2.7/SocketServer.py", γραμμή 227, σε serve_forever
& Nbsp? Self._handle_request_noblock ()
& Nbsp? Αρχείο "/usr/lib/python2.7/SocketServer.py", γραμμή 284, σε _handle_request_noblock
& Nbsp? Self.process_request (αίτηση, client_address)
& Nbsp? Αρχείο "/usr/lib/python2.7/SocketServer.py", γραμμή 310, σε process_request
& Nbsp? Self.finish_request (αίτηση, client_address)
& Nbsp? Αρχείο "/usr/lib/python2.7/SocketServer.py", γραμμή 323, σε finish_request
& Nbsp? Self.RequestHandlerClass (αίτηση, client_address, αυτο)
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", γραμμή 570, στην __init__
& Nbsp? BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp? Αρχείο "/usr/lib/python2.7/SocketServer.py", γραμμή 639, στην __init__
& Nbsp? Self.handle ()
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", γραμμή 615, στην λαβή
& Nbsp? Handler.run (self.server.get_app ())
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", γραμμή 283, στο τρέξιμο
& Nbsp? Self.result = εφαρμογή (self.environ, self.start_response)
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py», γραμμή 68, σε __call__
& Nbsp? Self.application επιστροφής (Environ, start_response)
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", γραμμή 273, σε __call__
& Nbsp? Απόκρισης = self.get_response (αίτηση)
& Nbsp? Αρχείο "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", γραμμή 111, στην εντολή GET RESPONSE
& Nbsp? Απόκρισης = επανάκλησης (αίτηση, * callback_args, ** callback_kwargs)
& Nbsp? Αρχείο "/home/erik/work/middleware/middleware/sleep/views.py", γραμμή 6, στον ύπνο
& Nbsp? Time.sleep (float (request.GET.get («καθυστέρηση», 1)))
Πλήρης backtrace με τις τοπικές μεταβλητές:
& Nbsp? Αρχείου "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", γραμμή 107, σε inner_run
& Nbsp? Τρέξιμο (self.addr, int (self.port), χειριστής, IPv6 = self.use_ipv6)
& Nbsp? ... Φορτώνει περισσότερα ...
Το παραπάνω παράδειγμα δείχνει ότι το νήμα αίτημα είχε αποκλειστεί σε time.sleep () κατά τη στιγμή dogslow πήρε το στιγμιότυπο του.
Οι αιτήσεις που επιστρέφουν πριν χρονικού ορίου dogslow λήξει δεν θα εμφανισθεί.
Σημειώστε ότι dogslow παίρνει μόνο μια ματιά στη στοίβα του νήματος. Δεν διακόπτει την αίτηση, ή να επηρεάσει με οποιονδήποτε άλλο τρόπο. Χρησιμοποιώντας dogslow εκ τούτου, είναι ασφαλές για χρήση στην παραγωγή.
Προειδοποιήσεις
Dogslow χρησιμοποιεί multithreading. Διαθέτει ένα ενιαίο νήμα φόντο τις λαβές των χρονικών ορίων επαγρύπνησης και λαμβάνει τα tracebacks, έτσι ώστε οι αρχικές νήματα αίτημα δεν διακόπτονται. Αυτό έχει κάποιες συνέπειες.
Multithreading και η GIL
Στην CPython, η GIL (Global Interpreter Lock) εμποδίζει πολλαπλά threads από την εκτέλεση κώδικα Python ταυτόχρονα. Μόνο όταν ένα νήμα απελευθερώνει ρητά κλειδαριά της σχετικά με την GIL, μπορεί ένα δεύτερο τρέξιμο νήμα.
Απελευθερώνοντας το GIL γίνεται αυτόματα κάθε φορά που ένα πρόγραμμα Python κάνει το κλείδωμα κλήσεις εκτός του διερμηνέα, για παράδειγμα όταν κάνει IO.
Για dogslow αυτό σημαίνει ότι το μόνο που μπορεί αξιόπιστα τομής αιτήματα που αργούν επειδή κάνουν IO, καλώντας τον ύπνο ή απασχολημένος περιμένουν να αποκτήσουν οι ίδιοι κλειδαριές.
Στις περισσότερες περιπτώσεις, αυτό είναι καλό. Μια σημαντική αιτία της αργής αιτήματα Django είναι ένα ακριβό ερώτημα βάσης δεδομένων. Δεδομένου ότι αυτό είναι IO, dogslow μπορούν να συλλαμβάνουν εκείνους πρόστιμο. Ένα σενάριο όπου GIL CPython είναι προβληματικό είναι όταν το νήμα του αιτήματος χτυπά ένα άπειρο βρόχο στον κώδικα Python (ή νόμιμο Python που είναι εξαιρετικά ακριβό και παίρνει πολύ χρόνο για να εκτελέσει), ποτέ δεν την απελευθέρωση της GIL. Ακόμα κι αν χρονόμετρο φυλάκων dogslow του δεν θα καταστεί εκτελέσιμη, δεν μπορεί να καταγράψει την στοίβα.
Co-ρουτίνες και Greenlets
Dogslow προορίζεται για χρήση σε μία διαμόρφωση σύγχρονη εργαζομένου. Ένα διακομιστή που χρησιμοποιεί ειδικό κλωστές (ή, ειδικές διαδικασίες μονού νήματος εργαζόμενος), να εξυπηρετήσει τα αιτήματα. Ενσωματωμένος διακομιστής WSGI Django του το κάνει αυτό, όπως και η Gunicorn στον προεπιλεγμένο τρόπο συγχρονισμού των εργαζομένων της.
Όταν τρέχει με ένα «πλαίσιο συνεργασίας ρουτίνες», όπου οι πολλαπλές αιτήσεις εξυπηρετούνται ταυτόχρονα από μια κλωστή, backtraces θα μπορούσε να γίνει παράλογο

Απαιτήσεις :.

  • Python
  • Django

Άλλο λογισμικό του προγραμματιστή Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Σχόλια για Dogslow

Τα σχόλια δεν βρέθηκε
προσθήκη σχολίου
Ενεργοποιήστε τις εικόνες!