私はDjangoアプリのパフォーマンスをテストすることに興味がありますが、ラインごとのパフォーマンスデータを取得する最も良い方法は何ですか?ベンチマーキングdjangoアプリ
注::この検索は、ジャンゴ自体をベンチマークする多くの人を返します。私はdjangoのベンチマークを探していません、私は書いているdjangoのアプリケーションのパフォーマンスをテストしようとしています:)
ありがとう!
編集:私はちょうどボトルネックがこれに2つの層があります非常に細かいレベル
私はDjangoアプリのパフォーマンスをテストすることに興味がありますが、ラインごとのパフォーマンスデータを取得する最も良い方法は何ですか?ベンチマーキングdjangoアプリ
注::この検索は、ジャンゴ自体をベンチマークする多くの人を返します。私はdjangoのベンチマークを探していません、私は書いているdjangoのアプリケーションのパフォーマンスをテストしようとしています:)
ありがとう!
編集:私はちょうどボトルネックがこれに2つの層があります非常に細かいレベル
上にある場所を見つけるために、個々の機能、DBの呼び出しなどのタイミングを意味する「行ずつ」と。私たちはテストのために#1の大部分を持っています。私たちは#2を開始しようとしています。
Djangoは隔離されています。通常のDjangoユニットテストはここでうまくいきます。少数(6未満)の「典型的な」ユースケースを循環するテストをいくつか作成します。これを取得し、投稿するなど。タイミングデータを収集する。これは実際のWebパフォーマンスではありませんが、チューニングに使用できるテストシナリオでは簡単に動作します。
ウェブスタック全体。この場合、Squid、Apache、Django、MySQLなどを実行する通常のサーバーが必要です。クライアントを動かすために2台目のコンピュータが必要になります。urllib2を使ってWebサイトを実行し、6つ以下の「典型的な」ユースケースを実行します。これを取得し、投稿するなど。タイミングデータを収集する。これはまだインターネットを経由しているわけではないので、「本当の」ウェブパフォーマンスではありませんが、実際には精巧な設定なしでは得られるほど近くにあります。
#2(エンドツーエンド)には、パフォーマンスのために多くのキャッシュが含まれています。クライアントスクリプトが同様の作業を行っている場合、キャッシングは本当に有益です。あなたのクライアントスクリプトが毎回ユニークなことをするなら、キャッシュはあまり有益ではありません。
「最も一般的な」作業負荷の決定は、最も困難な作業です。これは機能テストではないため、ワークロードにすべてを含める必要はありません。また、クライアントがより多くの同時セッションを実行するほど、遅くなります。テストクライアントが処理の中で最も遅い場合、サーバーを最適化しようとしないでください。
編集
「ライン・バイ・ライン」は「プロファイリング」を意味する場合は、よく、あなたはPythonのプロファイラを実行し得るようになってきました。キャッシングの多くは、DjangoのORM層でありますことを
https://docs.python.org/library/profile.html
注意。意味のある測定値を得るためにビュー関数を6回実行することは賢明ではありません。あなたは "典型的な"一連の操作を実行してから、プロファイル内のホットスポットを見つけなければなりません。
一般的に、アプリケーションの最適化は簡単です。多大な作業を行うべきではありません。あなたのビュー関数は短く、話す処理がありません。同様に、フォームとモデルのメソッド関数は非常に短くなければなりません。
主にナンバー1を参照する...私はunittestが答えかもしれないと思った! btw ... S. Lott私が投稿したほとんどすべての質問に答えることができました。それは非常に感謝しています:) 私は大学の上級生です。私はスタックオーバーフローでそんなに学びました。 – Jiaaro
ありがとう優しい言葉。 –
Djangoアプリケーションで行ごとのパフォーマンスデータ(プロファイリング)を取得する方法の1つは、repoze.profileのようなWSGIミドルウェアコンポーネントを使用することです。
...
application = django.core.handlers.wsgi.WSGIHandler()
...
from repoze.profile.profiler import AccumulatingProfileMiddleware
application = AccumulatingProfileMiddleware(
application,
log_filename='/path/to/logs/profile.log',
discard_first_request=True,
flush_at_shutdown=True,
path='/_profile'
)
そして今、あなたのプロファイルデータを表示する/ _profileにブラウザを指すことができます:あなたはこのようなあなたのアプリにrepoze.profile挿入することができますApacheでのmod_wsgiを使用していると仮定すると、
。もちろん、mod_pythonや内部のDjangoサーバでは動作しません。
はmod_pythonのために存在するものは何ですか? – Jiaaro
標準のPythonプロファイラ(http://docs.python.org/library/profile.htmlを参照)を呼び出しているので、方法があるかもしれませんが、mod_pythonとしてそれをうまくパッケージ化する動機はないと確信しています死んでいる。 –
また、出力をもう一度見た後では、実際には行単位のパフォーマンスデータではないことも付け加えておきます。これは、各メソッド/関数の実行に費やされた時間のログです。これは、行ごとに完全に一致するわけではありませんが、近くにあります。 –
「行単位のパフォーマンスデータ」を定義してください。 –
申し訳ありませんが、コードごとの実行時間、機能、dbコールなどの時間を測定するだけです。 – Jiaaro