6

まず第一に、Django を利用したサイトのパフォーマンスに不満はありません。大量のトラフィックが得られず、これまでのところ 1 日あたり 1000 回を少し超える訪問数です。

大量のトラフィックのピークにどれだけうまく対処できるか興味があったので、ab-tool を使用してベンチマークを行いました。

同時実行数が 1 より大きい場合のパフォーマンスは、1 つの同時接続と同じ量の要求を配信することに気付きました。

要求/秒は同時実行で増加するべきではありませんか?

1 GB の RAM、apache2 (prefork)、mod_wsgi、memcached、および mysql を備えた仮想マシン上にいます。
ページのすべてのコンテンツがキャッシュされ、データベースはヒットしません。また、memcached がエントリを削除した場合、軽い (インデックス付きの) クエリは 2 つしかないため、すぐに再キャッシュする必要があります。

ベンチマーク データ: (注: 2000 および 10k のリクエストでベンチマークを行ったが、結果は同じであった)

開始ページについては、django によって apache2/mod_wsgi を介して提供されます:
-n100 -c4: http://dpaste.com/97999/ (58.2 reqs/s)
-n100 -c1: http://dpaste.com/97998/ (57.7要求/秒)

robots.txt の場合、apache2 から直接:
-n100 -c4: http://dpaste.com/97992/ (4917 reqs/s)
-n100 -c1: http://dpaste.com/97991/ (1412 reqs/s ) )

これは私の apache conf です: http://dpaste.com/97995/

編集:より多くの情報を追加しました

wsgi.conf: http://dpaste.com/98461/

mysite.conf: http://dpaste.com/98462/

私の wsgi ハンドラ:

import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
4

1 に答える 1

12

prefork MPM と mod_wsgi を多くのプロセスを含む組み込みモードで使用しているため、ボックスのパフォーマンスが低下している可能性があります。まず、以下を読むことをお勧めします。

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html

組み込みモードを使用する場合は、MPM パラメーターを慎重に調整する必要があります。MaxRequestsPerChild をゼロ以外に設定することは、定期的に Apache プロセスを強制的に実行することになるため、良いスタートではありません。その結果、すべてをリロードする必要があるため、負荷スパイクが発生します。

ワーカー MPM を使用し、Python Web アプリケーションを mod_wsgi デーモン モードで実行することをお勧めします。これにより、まず実行されるプロセスが大幅に減少し、メモリのオーバーヘッドが減少し、システムのパフォーマンスに関する予測可能性が高まります。その後、動作が遅くなる理由を詳しく調べ始めることができます。

注意すべきことの 1 つは、「ab」出力の次のセクションで得られる内容です。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     0    0   0.2      0       2
Waiting:        0    0   0.1      0       2
Total:          0    0   0.2      0       2

最大列に大きな値が表示されている場合は、プリロードによってテストからそれらを除外していないか、プロセスの再起動間隔が短いために、アプリケーションの読み込みコストに見舞われています。

于 2009-09-26T11:26:14.890 に答える