Dogslow

البرمجيات قطة:
Dogslow
تفاصيل البرنامج:
الإصدار: 0.9.5
تاريخ إيداع: 14 Apr 15
المطور: Erik van Zijst
ترخيص: حرر
شعبية: 1

Rating: nan/5 (Total Votes: 0)

وDogslow هو جانغو الطبقة الوسيطة الوكالة الدولية للطاقة الذي يسجل tracebacks طلبات بطيئة.
التركيب:
تثبيت dogslow:
PIP تثبيت dogslow
ثم تضاف إذا إلى قائمة الطبقات الوسيطة في ملف settings.py جانغو الخاص بك:
MIDDLEWARE_CLASSES = (
على & nbsp؛ "dogslow.WatchdogMiddleware،
على & nbsp؛ ...
)
للحصول على أفضل النتائج، وجعلها واحدة من middlewares الأولى التي يتم تشغيلها.
التكوين:
يمكنك استخدام خصائص التكوين التالية في ملف settings.py للحن الوكالة الدولية للطاقة:
يتم تمكين # حراسة افتراضيا، لتعطيل مؤقتا، تعيين إلى خطأ:
DOGSLOW = صحيح
# الموقع حيث حراسة مخازن ملفات السجل الخاص به:
DOGSLOW_OUTPUT = '/ تمة "
طلبات # سجل يستغرق وقتا أطول من 25 ثانية:
DOGSLOW_TIMER = 25
# عندما كلا محددة، رسائل البريد الإلكتروني backtraces:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com "
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com "
الاستعمال:
كل طلب HTTP واردة يحصل على مهلة 25 ثانية في الوكالة الدولية للطاقة. إذا لا يرجع الطلب في غضون ذلك الوقت، الوكالة الدولية للطاقة ينشط ويأخذ نظرة خاطفة على كومة من موضوع طلب ويكتب المتتبع الخلفي (بما في ذلك جميع المتغيرات كومة المحلية - أسلوب جانغو) إلى ملف السجل.
يتم تسجيل كل طلب بطيء في ملف منفصل التي تبدو مثل هذا:
طلب أوندد اعتراضها في: 16-05-2011 02:10:12 UTC
GET HTTP: // المضيف المحلي: 8000 / تأخير = 2
ID الموضوع: 140539485042432
معرف العملية: 18010
الأم PID: 17762
كتبت: 16-05-2011 02: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، كثافة العمليات (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 .__ الحرف الأول __ (النفس، * وسائط **، 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 (البيئى، 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 (تعويم (request.GET.get ('تأخير'، 1)))
المتتبع الخلفي الكامل مع المتغيرات المحلية:
على & nbsp؛ الملف "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", خط 107، في inner_run
على & nbsp؛ المدى (self.addr، كثافة العمليات (self.port)، معالج و IPv6 = self.use_ipv6)
على & nbsp؛ ... الأحمال أكثر ...
المثال أعلاه يبين أن موضوع طلب تم حجب في time.sleep () في وقت dogslow أخذ لقطة لها.
انتهاء صلاحية لا تحصل على تسجيل طلبات التي ترجع قبل مهلة dogslow ل.
لاحظ أن dogslow يستغرق سوى نظرة خاطفة على كومة لمؤشر الترابط. فإنه لا يقطع الطلب، أو التأثير عليه بأي طريقة أخرى. ولذلك فإن استخدام dogslow غير آمنة للاستخدام في الإنتاج.
المحاذير
يستخدم Dogslow خاصية تعدد. لديه خلفية واحدة خيط مقابض للمهلة الوكالة الدولية للطاقة ويأخذ tracebacks، بحيث لا يتم تنقطع خيوط الطلب الأصلي. وهذا له بعض العواقب.
خاصية تعدد وGIL
في سي بايثون، وGIL (جلوبل قفل مترجم) يمنع المواضيع متعددة من تنفيذ التعليمات البرمجية بيثون في وقت واحد. فقط عندما يكون موضوع النشرات صراحة القفل على GIL، يمكن تشغيل موضوع الثاني.
الافراج عن GIL يتم تلقائيا كلما برنامج بيثون يجعل حجب المكالمات خارج مترجم، على سبيل المثال عند القيام IO.
لdogslow هذا يعني أنه يمكن أن يعتمد عليه الا ان اعتراض طلبات التي تكون بطيئة لأنهم يفعلون IO، داعيا النوم أو مشغول الانتظار للحصول على أقفال أنفسهم.
في معظم الحالات هذا على ما يرام. أحد أهم أسباب طلبات جانغو بطيئة هو استعلام قاعدة بيانات مكلفة. لأن هذا هو IO، ويمكن dogslow اعتراض تلك الغرامة. سيناريو حيث GIL سي بايثون هو إشكالي هو عندما يضرب موضوع طلب في حلقة لا نهائية في التعليمات البرمجية بيثون (أو بيثون الشرعي الذي أمر مكلف للغاية وتستغرق وقتا طويلا لتنفيذ)، لم الافراج عن GIL. على الرغم من أن توقيت الوكالة الدولية للطاقة dogslow للا تصبح runnable، فإنه لا يمكن تسجيل المكدس.
شارك في الروتين وGreenlets
والمقصود Dogslow للاستخدام في تكوين عامل متزامن. خادم ويب يستخدم المواضيع مخصصة (أو العمليات المنفذة ترابط واحد، مخصصة) لخدمة الطلبات. المدمج في خادم WSGI جانغو ليفعل ذلك، كما يفعل Gunicorn في الوضع الافتراضي متزامنة في العمل به.
عندما تعمل مع "إطار التعاون الروتينية" حيث يتم تقديم طلبات متعددة بشكل متزامن من قبل موضوع واحد، قد تصبح لا معنى لها backtraces

المتطلبات:.

بيثون
جانغو

البرامج الأخرى من المطور Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

تعليقات ل Dogslow

لم يتم العثور على التعليقات
إضافة تعليق
بدوره على الصور!