Dogslow

Скріншот програми:
Dogslow
Дані програми:
Версія: 0.9.5
Дата завантаження: 14 Apr 15
Розробник: Erik van Zijst
Ліцензія: Безкоштовно
Популярність: 1

Rating: nan/5 (Total Votes: 0)

Dogslow є Django сторожовий проміжного класу, який реєструє ел.пошти повільних запитів.
установки:
Встановіть dogslow:
пункт встановити dogslow
Потім додайте, якщо в ваш список проміжного класів вашої settings.py файлу Django:
MIDDLEWARE_CLASSES = (
І NBSP; 'dogslow.WatchdogMiddleware',
І NBSP; ...
)
Для досягнення найкращих результатів, роблять його одним з перших проміжне програмне який запускається.
Конфігурація:
Ви можете використовувати наступні властивості конфігурації у вашому settings.py файлу для налаштування сторожового:
# Сторожовий таймер включений за замовчуванням, щоб тимчасово відключити, встановіть False:
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. Якщо запит не повертає протягом цього часу, сторожовий активує і приймає поглянути на стек прохання потоку і записує трасування (включаючи всі локальні змінні в стеку - Django стиль) у файл журналу.
Кожен повільного запиту записується в окремий файл, який виглядає наступним чином:
Нежить запит перехоплюється на: 16.05.2011 2:10:12 UTC
GET HTTP: // локальний: 8000 / затримка = 2
Автор ID: 140539485042432
Процес ID: 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; Run (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 .__ ініціалізації __ (сам, * 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 (середа, 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; Run (self.addr, INT (self.port), обробник, IPv6 = self.use_ipv6)
І NBSP; ... навантаження більше ...
Наведений вище приклад показує, що потік запиту був заблокований в time.sleep () під час dogslow взяв його знімок.
Запити, які повертають до тайм-ауту dogslow закінчується не потрібно реєструватися.
Зверніть увагу, що dogslow займе всього поглянути на стек потоку. Це не перериває запит, або впливати на нього будь-яким іншим способом. Використання dogslow тому безпечні для використання у виробництві.
Попередження
Dogslow використовує багатопоточність. Вона має одну фонову нитку обробляє сторожові тайм-аути і приймає пошту, так що оригінальні теми запиту не переривається. Це має деякі наслідки.
Нить і GIL
У CPython, GIL (Global Interpreter Lock) запобігає декількома потоками виконання Python код одночасно. Тільки тоді, коли потік явно випускає свій замок на GIL, може другий потік виконання.
Звільнення GIL робиться автоматично, коли програма Python робить блокування викликів за межами перекладача, наприклад при роботі IO.
Для dogslow це означає, що він може тільки надійно перехоплювати запити, які повільно, тому що вони роблять IO, називаючи сон або зайнятий чекати, щоб отримати самі замки.
У більшості випадків це нормально. Важливою причиною повільних запитів Django є дорогим запит до бази даних. Так як це IO, dogslow може перехопити тих порядку. Сценарій, в якому GIL CPython проблематично, коли потік прохання хітів нескінченний цикл в Python коду (або законного Python, що є надзвичайно дорого і забирає багато часу, щоб виконати), ніколи не відпускаючи GIL. Незважаючи на те, сторожовий таймер dogslow в дійсно стає працездатною, вона не може увійти в стек.
співпрограми і Greenlets
Dogslow призначений для використання в синхронній конфігурації робітника. Веб-сервер, який використовує спеціальні теми (або однопоточних, виділені робочі процеси) для обслуговування запитів. Вбудований в WSGI-сервер в Django робить це, так само як і Gunicorn в режимі синхронізації, робочий за замовчуванням.
При роботі з «Рамки співпраці підпрограм", де численні запити подаються одночасно на одному потоці, Ланцюжки викликів може стати безглуздим

Вимоги :.

  • Python
  • Django

Інші програми розробника Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Dogslow

Коментар не знайдено
додати коментар
Включіть картинки!