1

私はApache mod_wsgiでdjangoを使用しています。私のサイトにはすべてのページに動的データがあり、すべてのメディア(css、画像、js)は「http://bucket.domain.com/images/ 」経由で好きなAmazon S3バケットに保存されています*.jpg" マークアップ内。. . . 私の質問は、ワニスを使用しても Web サーバーの速度を上げることができますか?

私はここですべての障害を取り除こうとしています。他に見るべきものはありますか?各ページでコードのクエリ プロファイラーを作成しましたが、約0.120 CPU 秒でレンダリングされますが、これは十分に速いようですが、ab -c 5 -n 100 http://mysite.com/を使用すると、結果は1 秒あたりのリクエストのみになります。 12.70 [#/秒] (平均) . . .

多くの変数が関係していることは理解していますが、私ができることについてのガイダンスを探しており、Varnish が答えかもしれないと考えました。

更新 ここに私のプロファイラーのスクリーンショットがあります 代替テキスト

4

2 に答える 2

2

パフォーマンスを向上させる唯一の方法は、パフォーマンスを低下させている原因を測定することです。世界最高のプロファイラーではありませんが、Django は hotshot プロファイラー(ここで説明)とうまく統合されており、0.120 cpu 秒を費やしているものを把握できます。

2 CPU を使用していますか? その場合は、ab を使用するときにデータベースに制限がある可能性がありますか? 0.120 * 12.70 は 1.5 であるため、何かを待っている時間が 0.5 秒あるということだけを言います。これは、IO か何かである可能性もあります。

ワニスなどの理由もなく別のレイヤーを追加することは、通常はお勧めできません。ワニスのようなものが役立つ唯一のケースは、接続が不十分で低速のクライアントがスレッドを保持している場合ですが、ab テストはこの状態に達しておらず、率直に言って、余分なレイヤーを保証するほど大きな問題ではありません。

さて、次のトピックはキャッシングです。これにはワニス役立ちます。あなたのページはユーザーごとにカスタマイズされていますか、それとも長期間静的であってもかまいませんか? 多くの場合、単純なログイン ステータス画面を除き、ページは静的です。この場合、そのログイン ステータスを Cookie を使用して JavaScript にオフロードすることを検討してください。ページ全体をキャッシュできる場合は、ab で非常に高速になります。ただし、次の問題は、ユーザーがただ 1 つのページに座って f5 キーを繰り返し押すわけではないため、ab は実際にはサイトの良いベンチマークではないということです。

于 2010-10-20T23:23:18.197 に答える
2

ワニスをインストールする前に、次のことを考慮してください。

  • まず、Django 内でページ キャッシング ミドルウェアを有効にしましたか?
  • etag は正しく設定され、機能していますか?
  • データベース サーバーは最適に動作していますか?
  • 一般的な結果を得るために、コード内で memcached を使用してキャッシュを設定することを検討しましたか? (特に、ログインしていないユーザーに表示されるフロント ページと静的ページ)

ユーザーごとに実質的に異なるデータを絶対に表示する必要がある、クエリの負荷が高い動的ページを除いて、0.12 秒はページを提供するのに長い時間のように思えます。そのパフォーマンスを向上させるために、アプリにキャッシュを組み込む方法を検討してください。ユーザー名など以外のほとんどが静的なページがある場合は、ページの計算された部分をキャッシュします。

Django のキャッシングが適切に機能している場合、ab公開ページは非常に高速です。Apache の他の機能を使用していない場合は、lighttpd や nginx などの軽量で高速なものを使用することを検討してください。

Eric Florenzano は、いくつかの高度なキャッシング動作を実装する django-newcache と呼ばれる非常に便利なプロジェクトをまとめました。組み込みのキャッシュの制限に直面している場合は、それを考慮してください。http://github.com/ercflo/django-newcache

于 2010-10-20T23:24:02.733 に答える