Dogslow

ソフトウェアのスクリーンショット:
Dogslow
ソフトウェアの詳細:
バージョン: 0.9.5
日付のアップロード: 14 Apr 15
開発者: Erik van Zijst
ライセンス: 無料
人気: 1

Rating: nan/5 (Total Votes: 0)

Dogslowは遅い要求のトレースバックをログに記録ジャンゴドッグ·ミドルウェアクラスです。
のインストール:
dogslowインストールします。
dogslowをインストールピップ
そして、もしあなたのDjangoのsettings.pyファイルのミドルウェアクラスのリストに追加します。
MIDDLEWARE_CLASSES =(
  'dogslow.WatchdogMiddleware」、
  ...

最良の結果を得るためには、実行された最初のミドルウェアの1にする。
の構成:
あなたがチューニングするウォッチドッグをあなたのsettings.pyファイルの次の構成プロパティを使用することができます。
#ウォッチドッグは、Falseに設定され、一時的に無効にするには、デフォルトで有効になっています:
DOGSLOW = TRUE
ウォッチドッグは、そのログファイルを保存する#ロケーション:
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:// localhost:?8000 /ディレイ= 2
スレッドID:140539485042432
プロセスID:18010
親PID:17762
開始:16-05-2011 2時10分10秒UTC
 ファイル"/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", inner_runでライン107、
 実行(self.addr、INT(self.port)、ハンドラは、ipv6 = self.use_ipv6)
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py」、ライン696は、実行中
  httpd.serve_forever()
  serve_foreverに、線227、「/usr/lib/python2.7/SocketServer.pyを "ファイル
  self._handle_request_noblock()
  _handle_request_noblockに、ライン284、「/usr/lib/python2.7/SocketServer.pyを "ファイル
  self.process_request(リクエスト、CLIENT_ADDRESS)
  process一に、線310、「/usr/lib/python2.7/SocketServer.pyを "ファイル
  self.finish_request(リクエスト、CLIENT_ADDRESS)
  finish_requestに、線323、「/usr/lib/python2.7/SocketServer.pyを "ファイル
  self.RequestHandlerClass(リクエスト、CLIENT_ADDRESS、自己)
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py」、ライン570、__init__で
  BaseHTTPRequestHandlerでは.__ initは__(自己、* argsの、** kwargsから)
  __init__に、ライン639、「/usr/lib/python2.7/SocketServer.pyを "ファイル
  self.handle()
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py」、ライン615、ハンドル内
  handler.run(self.server.get_app())
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py」、ライン283は、実行中
  self.result =アプリケーション(self.environ、self.start_response)
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py」、ライン68、__call__で
 戻りself.application(環境、start_responseを)
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py」、ライン273、__call__で
 応答= self.get_response(リクエスト)
 ファイル "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py」、ライン111、GET_RESPONSEで
 応答=コールバック(要求、* callback_args、** callback_kwargs)
 睡眠中に「/home/erik/work/middleware/middleware/sleep/views.py」、6行目に、ファイル
  time.sleep(フロート(request.GET.get( '遅延'、1)))
ローカル変数との完全なバックトレース:
 ファイル"/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", inner_runでライン107、
 実行(self.addr、INT(self.port)、ハンドラは、ipv6 = self.use_ipv6)
  ...負荷もっと...
上記の例では、要求スレッドは、そのスナップショットを取ったdogslow時に()time.sleepにブロックされたことを示しています。
dogslowのタイムアウトが記録されません有効期限が切れる前に戻すことを要求します。
唯一dogslow注スレッドのスタックで覗くかかります。これは、割り込み要求、または他の方法でそれに影響を及ぼさない。 dogslowを使用すると、生産に使用することが安全です。
の注意事項
Dogslowはマルチスレッドを使用しています。これは、単一のバックグラウンドは、ハンドルのウォッチドッグ·タイムアウトスレッドがあり、元の要求スレッドが中断されないように、トレースバックを取る。これは、いくつかの結果を有する。
マルチスレッドとGIL
CPythonのでは、GIL(グローバルインタプリタロック)は、同時に、Pythonのコードを実行してから、複数のスレッドを防ぎます。スレッドが明示的にGILへのロックを解除するときにのみ、第2のねじ実行することができます。
Pythonプログラムは、IOを行うときに、たとえば、インタプリタの外に呼び出しをブロックしますたびに、GILを解放すると、自動的に行われます。
dogslowの場合、これはそれだけで確実に彼らはロック自身の獲得を待って、IOをやって睡眠を呼び出したり、忙しいされているため、低速での要求インターセプトできることを意味します。
ほとんどの場合、これは問題ありません。遅いDjangoの要求の重要な原因は、高価なデータベースクエリです。これはIOであるため、dogslowはそれらの罰金を傍受することができます。リクエストのスレッドはGILを解放することはありません、Pythonコード(または非常に高価であり、実行に時間がかかる正当なPythonで)で無限ループに当たったときCPythonののGILが問題となるシナリオがある。 dogslowのウォッチドッグタイマが実行可能になるんが、それはスタックをログに記録することはできません。
のコルーチンとGreenlets
Dogslow、同期ワーカー設定で使用するために意図されている。要求を処理するために専用のスレッド(またはシングルスレッド、専用のワーカープロセス)を使用してウェブサーバ。 Djangoの組み込みのWSGIサーバーGunicornがそのデフォルト同期ワーカーモードの場合のように、これを行います。
複数のリクエストが1スレッドによって同時に提供しています」コルーチンのフレームワーク」を実行している場合、バックトレースは無意味になる可能性があります。

の要件の:ます。

  • のPythonます。
  • ジャンゴます。
  • 開発者の他のソフトウェア Erik van Zijst

    interruptingcow
    interruptingcow

    14 Apr 15

    へのコメント Dogslow

    コメントが見つかりません
    コメントを追加
    画像をオンにする!