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 ถูกเปิดใช้งานโดยค่าเริ่มต้นที่จะปิดการใช้งานชั่วคราวตั้งค่าเป็นเท็จ:
DOGSLOW = True
# ที่อยู่สถานที่ Watchdog เก็บล็อกไฟล์ของมัน
DOGSLOW_OUTPUT = '/ tmp'
# การร้องขอเข้าสู่ระบบใช้เวลานานกว่า 25 วินาที:
DOGSLOW_TIMER = 25
# เมื่อทั้งระบุอีเมลติดตามย้อนหลัง:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
การใช้งาน:
ทุกการร้องขอ HTTP ที่เข้ามาได้รับ 25 หมดเวลาสองในสุนัขเฝ้าบ้าน หากคำขอไม่กลับมาภายในเวลาที่จ้องจับผิดเปิดใช้งานและใช้เวลามองที่สแต็คด้ายขอและเขียนติดตามย้อนหลัง (รวม stack ตัวแปรท้องถิ่นทั้งหมด - สไตล์ Django) ไปยังแฟ้มบันทึก
แต่ละคำขอช้าถูกบันทึกไว้ในแฟ้มแยกต่างหากที่มีลักษณะเช่นนี้
คำขอ Undead ดักได้ที่: 16-05-2011 02:10:12 UTC
แถม http: // localhost: 8000 / ล่าช้า = 2
ID กระทู้: 140539485042432
กระบวนการ ID: 18010
PID แม่: 17,762
เริ่มต้น: 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, int (self.port), จัดการ, IPv6 = self.use_ipv6)
& nbsp; File "/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; File "/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; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py" สาย 615, ในการจัดการ
& 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, ในระยะ
& nbsp; self.result ประยุกต์ใช้ = (self.environ, self.start_response)
& nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py" สาย 68, ใน __call__
& nbsp; ผลตอบแทน self.application (สภาพแวดล้อม, start_response)
& nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py" สาย 273 ใน __call__
& nbsp; การตอบสนอง = self.get_response (ตามคำขอ)
& nbsp; File "/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)))
ติดตามย้อนหลังเต็มไปด้วยตัวแปรท้องถิ่น:
& 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 (ทั่วโลกล่ามล็อค) ป้องกันไม่ให้หลายหัวข้อจากรันโค้ดงูใหญ่พร้อมกัน เฉพาะเมื่อด้ายอย่างชัดเจนออกล็อคในวันที่ GIL สามารถวิ่งด้ายที่สอง
ปล่อย GIL จะทำโดยอัตโนมัติเมื่อใดก็ตามที่โปรแกรมหลามทำให้ปิดกั้นการโทรนอกล่ามตัวอย่างเช่นเมื่อทำ IO
สำหรับ dogslow นี้หมายความว่ามันน่าเชื่อถือเท่านั้นที่สามารถสกัดกั้นการร้องขอที่จะช้าเพราะพวกเขากำลังทำ IO เรียกการนอนหลับหรือไม่ว่างรอที่จะได้รับล็อคตัวเอง
ในกรณีส่วนใหญ่นี้เป็นเรื่องปกติ สาเหตุสำคัญของการร้องขอของ Django ช้าการสืบค้นฐานข้อมูลที่มีราคาแพง ตั้งแต่นี้เป็น IO, dogslow สามารถสกัดกั้นผู้ดี สถานการณ์ที่ GIL CPython เป็นปัญหาคือเมื่อด้ายคำขอของฮิตวง จำกัด ในรหัสหลาม (หรืองูใหญ่ถูกต้องตามกฎหมายที่มีราคาแพงมากและใช้เวลานานในการดำเนินการ) ไม่เคยปล่อย GIL แม้ว่าเวลาจ้องจับผิด dogslow ของไม่เป็นที่ทำงานก็ไม่สามารถเข้าสู่ระบบสแต็ค
ร่วมการปฏิบัติและ Greenlets
Dogslow มีวัตถุประสงค์เพื่อใช้ในการกำหนดค่าคนงานซิงโคร เว็บเซิร์ฟเวอร์ที่ใช้หัวข้อทุ่มเท (หรือเธรดเดียวกระบวนการของผู้ปฏิบัติงานโดยเฉพาะ) ที่จะให้บริการการร้องขอ Django ในตัวเซิร์ฟเวอร์ WSGI ไม่นี้เช่นเดียวกับ Gunicorn ในโหมดซิงค์งานเริ่มต้นของ
เมื่อทำงานกับ "กรอบการทำงานร่วมการปฏิบัติ" ที่การร้องขอหลายเสิร์ฟพร้อมกันโดยหนึ่งด้ายติดตามย้อนหลังอาจจะกลายเป็นไร้สาระ

ต้องการ .

  • หลาม
  • Django

ซอฟแวร์อื่น ๆ ของนักพัฒนา Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

ความคิดเห็นที่ Dogslow

ความคิดเห็นที่ไม่พบ
เพิ่มความคิดเห็น
เปิดภาพ!