Dogslow

צילום מסך תוכנה:
Dogslow
פרטי תוכנה:
גרסה: 0.9.5
טען תאריך: 14 Apr 15
מפתחים: Erik van Zijst
רשיון: ללא תשלום
פופולריות: 1

Rating: nan/5 (Total Votes: 0)

Dogslow הוא מעמד ביניים כלב השמירה Django שנכנס tracebacks בקשות איטיות.
התקנה:
התקן dogslow:
PIP להתקין dogslow
ואז להוסיף אם לרשימת שיעורי תווך בקובץ settings.py Django שלך שלך:
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 בכלב השמירה. אם בקשה אינה חוזרת בפרק זמן זה, כלב השמירה מפעילה ולוקח להציץ בערימה של חוט הבקשה וכותבת backtrace (כולל כל המשתנים המקומיים הערימה - סגנון Django) לקובץ יומן.
כל בקשה איטית נרשמת בקובץ נפרד שנראה כך:
בקשת Undead יורטה ב: 16-05-2011 2:10:12 UTC
GET http: // localhost:? 8000 / עיכוב = 2
זיהוי נושא: 140539485042432
מזהה תהליך: 18010
PID הורה: 17,762
התחיל: 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 __ (עצמי, * 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) מונע אשכולות מרובים מביצוע קוד פייתון בו-זמנית. רק כאשר חוט במפורש משחרר הנעילה שלה בגיל, יכול לרוץ חוט שני.
שחרור GIL נעשה באופן אוטומטי בכל פעם שתכנית פייתון עושה חסימת שיחות מחוץ למתורגמן, לדוגמא כאשר עושה IO.
לdogslow זה אומר שזה יכול רק באופן מהימן ליירט בקשות שהן איטיים בגלל שהם עושים IO, קוראים שינה או עסוקים מחכים לרכוש מנעולים עצמם.
ברוב המקרים זה בסדר. גורם חשוב לבקשות Django איטיות הוא שאילתא מסד נתונים יקרה. מכיוון שמדובר בIO, dogslow יכול ליירט בסדר אלה. תרחיש שבו GIL של cPython הוא בעייתי הוא כאשר החוט של הבקשה פוגע לולאה אינסופית בקוד פייתון (Python או לגיטימי כי הוא מאוד יקר ולוקח הרבה זמן לביצוע), אף פעם לא משחרר את GIL. למרות טיימר כלב השמירה של dogslow הופך להיות להריץ, זה לא יכול להיכנס לערימה.
Co-שגרה וGreenlets
Dogslow מיועד לשימוש בתצורת עובד סינכרוני. שרת אינטרנט המשתמש באשכולות ייעודיים (או תהליכי עובדים של הליכי משנה בודדים, ייעודיים) כדי לשרת בקשות. שרת wsgi המובנה של Django עושה זאת, כפי שעושה Gunicorn במצב הסנכרון לעבודה ברירת מחדל שלו.
בעת ההפעלה עם "מסגרת שיתוף שגרה", שבי בקשות מרובות מוגשות במקביל על ידי חוט אחד, backtraces עלול להפוך שטותי

דרישות :.

  • Python
  • Django

תוכנות אחרות של יזם Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

תגובות ל Dogslow

תגובות לא נמצא
להוסיף הערה
הפעל את התמונות!