Dogslow

Software screenshot:
Dogslow
Rincian Software:
Versi: 0.9.5
Tanggal Upload: 14 Apr 15
Pengembang: Erik van Zijst
Lisensi: Gratis
Popularitas: 1

Rating: nan/5 (Total Votes: 0)

Dogslow adalah Django pengawas middleware kelas yang log tracebacks permintaan lambat.
Instalasi:
Instal dogslow:
pip menginstal dogslow
Kemudian tambahkan jika ke daftar kelas middleware dalam file settings.py Django Anda:
MIDDLEWARE_CLASSES = (
& Nbsp; 'dogslow.WatchdogMiddleware',
& Nbsp; ...
)
Untuk hasil terbaik, membuat salah satu middlewares pertama yang dijalankan.
Konfigurasi:
Anda dapat menggunakan properti konfigurasi berikut dalam file settings.py Anda untuk menyempurnakan pengawas:
# Watchdog diaktifkan secara default, untuk menonaktifkan sementara, diatur ke False:
DOGSLOW = True
# Lokasi di mana Watchdog menyimpan file log-nya:
DOGSLOW_OUTPUT = '/ tmp'
Permintaan # Log mengambil lebih lama dari 25 detik:
DOGSLOW_TIMER = 25
# Ketika kedua ditentukan, email backtraces:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Penggunaan:
Setiap permintaan HTTP yang masuk mendapat batas waktu 25 detik dalam pengawas. Jika permintaan tidak kembali dalam waktu tersebut, pengawas mengaktifkan dan mengambil mengintip di tumpukan benang permintaan dan menulis backtrace (termasuk semua variabel tumpukan lokal - gaya Django) ke file log.
Setiap permintaan lambat dicatat dalam file terpisah yang terlihat seperti ini:
Permintaan mayat hidup dicegat di: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 / delay = 2
Thread ID: 140539485042432
Proses ID: 18010
Induk PID: 17762
Dimulai: 16-05-2011 02:10:10 UTC
& Nbsp; Berkas "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", baris 107, di 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", baris 696, dalam menjalankan
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", baris 227, di serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", baris 284, di _handle_request_noblock
& Nbsp; self.process_request (request, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", baris 310, di process_request
& Nbsp; self.finish_request (request, client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", baris 323, di finish_request
& Nbsp; self.RequestHandlerClass (permintaan, client_address, self)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", baris 570, di __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", baris 639, di __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", baris 615, dalam menangani
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", baris 283, dalam menjalankan
& Nbsp; self.result = aplikasi (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", baris 68, di __call__
& Nbsp; kembali self.application (environ, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", baris 273, di __call__
& Nbsp; respon = self.get_response (permintaan)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", baris 111, di get_response
& Nbsp; respon = callback (permintaan, * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", baris 6, dalam tidur
& Nbsp; time.sleep (float (request.GET.get ('delay', 1)))
Backtrace penuh dengan variabel lokal:
& Nbsp; Berkas "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", baris 107, di inner_run
& Nbsp; run (self.addr, int (self.port), handler, ipv6 = self.use_ipv6)
& Nbsp; ... beban lebih ...
Contoh di atas menunjukkan bahwa benang permintaan diblokir di time.sleep () pada saat dogslow mengambil snapshot nya.
Permintaan yang kembali sebelum batas waktu yang dogslow ini berakhir tidak logout.
Perhatikan dogslow yang hanya membutuhkan waktu mengintip stack thread. Ini tidak mengganggu permintaan, atau mempengaruhinya dengan cara lain. Menggunakan dogslow Oleh karena itu aman untuk digunakan dalam produksi.
Peringatan
Dogslow menggunakan multithreading. Memiliki latar belakang tunggal benang menangani timeout pengawas dan mengambil tracebacks, sehingga benang permohonan asli tidak terganggu. Ini memiliki beberapa konsekuensi.
Multithreading dan GIL
Dalam CPython, GIL (Global Juru Kunci) mencegah beberapa thread dari mengeksekusi kode Python bersamaan. Hanya ketika thread secara eksplisit melepaskan kunci terhadap GIL, bisa kedua benang dijalankan.
Melepaskan GIL dilakukan secara otomatis setiap kali program Python membuat memblokir panggilan luar penafsir, misalnya ketika melakukan IO.
Untuk dogslow ini berarti bahwa hanya dapat dipercaya mencegat permintaan yang lambat karena mereka melakukan IO, memanggil tidur atau sibuk menunggu untuk mendapatkan kunci sendiri.
Dalam kebanyakan kasus ini baik-baik saja. Penyebab penting lambat permintaan Django adalah query database mahal. Karena ini adalah IO, dogslow dapat mencegat mereka baik-baik saja. Sebuah skenario di mana CPython itu GIL bermasalah adalah ketika thread permintaan hits infinite loop dalam kode Python (Python atau sah yang sangat mahal dan memakan waktu lama untuk mengeksekusi), tidak pernah melepaskan GIL. Meskipun dogslow itu timer pengawas tidak menjadi runnable, itu tidak bisa login stack.
Co-rutinitas dan Greenlets
Dogslow dimaksudkan untuk digunakan dalam konfigurasi pekerja sinkron. Sebuah webserver yang menggunakan benang khusus (atau, proses pekerja khusus single-threaded) untuk melayani permintaan. Built-in server wsgi Django melakukan hal ini, seperti halnya Gunicorn dalam modus standar sync-pekerjanya.
Saat menjalankan dengan "kerangka co-rutinitas" di mana beberapa permintaan dilayani secara bersamaan oleh satu thread, backtraces mungkin menjadi masuk akal

Persyaratan :.

  • Python
  • Django

Perangkat lunak lain dari pengembang Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Komentar untuk Dogslow

Komentar tidak ditemukan
Tambahkan komentar
Aktifkan gambar!