回答:
Django Debug Toolbarをお試しください 。各ページで実行されるクエリと、それらにかかる時間を示します。本当に便利でパワフルで使いやすいツールです。
また、データベースアクセスの最適化の Djangoパフォーマンスに関する推奨事項もご覧ください。ドキュメントから、。
そして、Djangoのパフォーマンスのヒントジェイコブ・カプラン・モスによります。
グーグルで「django-profiling」と入力するだけで、次のリンク(およびその他)が表示されます。
http://code.djangoproject.com/wiki/ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/
個人的に私はミドルウェアアプローチを使用しています。つまり、各ユーザーはセッションに格納された「プロファイリング」フラグを切り替えることができ、プロファイリングミドルウェアがフラグが設定されていることに気付いた場合、次のようなPythonのホットショットモジュールを使用します。
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
編集:Konstantinが言及したhttp://github.com/robhudson/django-debug-toolbarの SQLクエリをプロファイリングするのは良いことですが、クエリが本当に遅い場合(おそらく数百または数千あるため)、 「ブラウザに読み込まれるまで非常に長い時間待機します。その後、処理速度が遅いため、閲覧が困難になります。また、django-debug-toolbarは、設計上、AJAXリクエストの内部について有用な洞察を与えることができません。
EDIT2:django-extensionsは、優れたプロファイリングコマンドが組み込まれています。
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
これを実行して、ほら:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
python manage.py runprofileserver --prof-path=/path/to/dir
、次のブログに従ってください:darkcoding.net/software/profiling-django-for-cpu-bound-apps。
hotshot
はPython 3で非推奨になり削除されているため、この回答とProfilingDjango
Wikiページは20202
データアクセスのプロファイリング(ボトルネックがほとんどの場合)については、django-live-profilerをチェックしてください。Django Debug Toolbarとは異なり、すべてのリクエストのデータを同時に収集し、パフォーマンスのオーバーヘッドをあまり増やしたり、アプリの内部を公開したりせずに、本番環境で実行できます。
ここでは恥知らずなプラグインですが、最近この目的のためにhttps://github.com/django-silk/silkを作成しました。これはdjangoツールバーにいくらか似ていますが、履歴、コードプロファイリング、およびすべてに対するより詳細な制御を備えています。
KCacheGrindのすべてのファンにとって、Djangoの素晴らしいテストと組み合わせてシェルを使用するのは非常に簡単だと思います Client
、特に本番プロファイルログをオンザフライで生成するためのです。このテクニックは軽いタッチを持っているので、何度か使用しています。厄介なミドルウェアやサードパーティのDjangoアプリケーションは必要ありません。
たとえば、実行速度が遅いと思われる特定のビューのプロファイルを作成するには、シェルを開いて次のコードを入力します。
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
結果のログを視覚化するために、hotshot2cachegrindを使用しました。
ただし、他のオプションもあります。
ビューがHTMLではない場合(JSONなど)、プロファイリングには単純なミドルウェアメソッドを使用します。
次に例をいくつか示します。
https://gist.github.com/1229685-ビューに入ったすべてのSQL呼び出しをキャプチャします
https://gist.github.com/1229681-ビューの作成に使用されるすべてのメソッド呼び出しのプロファイル
最近Djangoアプリのプロファイルを作成する必要があり、これらの提案の多くを試しました。代わりにpyinstrumentを使用しました。これはミドルウェアリストを1回更新するだけでDjangoアプリに追加でき、タイミングのスタックベースのビューを提供します。
他のいくつかのツールでの私の経験の簡単な要約:
pyinstrument
cProfile
タイミングにアクセスする簡単な方法を提供し、ajaxタイミングを自動的に表示します。どちらも非常に役立ちます。私が試した他のツールと比較して、pyinstrument
インストールと使用は劇的に簡単でした。