いくつかの異なる python web フレームワークでアプリを作成して、プログラミングとパフォーマンスのバランスが取れているものを確認しています。virtualenv で実行されている特定のアプリのメモリ使用量を報告する方法はありますか?
そうでない場合、Web フレームワーク アプリの平均、最大、最小のメモリ使用量を確認するにはどうすればよいですか?
いくつかの異なる python web フレームワークでアプリを作成して、プログラミングとパフォーマンスのバランスが取れているものを確認しています。virtualenv で実行されている特定のアプリのメモリ使用量を報告する方法はありますか?
そうでない場合、Web フレームワーク アプリの平均、最大、最小のメモリ使用量を確認するにはどうすればよいですか?
アプリケーション環境が主要な要因であるという Matt W のメモを 2 番目に引用します ( Gunicorn 、uWSGI、nginx->paster/pserve、eventlet、apache+mod_wsgi など)。
これも追加します - 年は 2012 年です。1999 年には、このようなもののためのメモリと CPU が大きな懸念事項でした。しかし、今は 2012 年です。コンピューターは大幅に強力になり、拡張がはるかに簡単かつ安価になり、フレームワークのコーディングが改善されました。
あなたは基本的に、実際的な問題がなく、理論的には「きちんとした」有益なベンチマークのみを見ています。
通常、Python Web アプリケーションのパフォーマンスのボトルネックは次のとおりです。
データベース通信のボトルネックに関して、それを解決するための一般的なアプローチは次のとおりです。
データベース スキーマに関しては、利便性には代償が伴います。Django で特定の処理を実行する方が高速ですが、Django が作成するスキーマにほとんどとらわれることになります。Pyramid+SqlAlchemy はより柔軟で、細かく調整されたデータベースに対して構築することができます... しかし、Django が提供する自動魔法のツールを手に入れることはできません。
同時接続/秒あたりのリクエストの場合、主に環境によるものです。paster、uwsgi、およびその他の展開戦略で同じアプリを実行すると、結果が異なります。
これは良いが古いベンチマークへのリンクです - http://nichol.as/benchmark-of-python-web-servers
そこにはピーク時のメモリ使用量のスライドがあり、いくつかの異常値と適切な量のクラスタリングが進行していますが、最悪のパフォーマンスは 122MB でした。それは何もありません。
gevent は、uwsgi の 15 または cogen の 122 と比較して 3MB あるという点で素晴らしいと解釈できますが、これらはすべて最新のシステムのメモリのごく一部です。
フレームワークのオーバーヘッドは非常に小さいため、動作パフォーマンスにはほとんど影響しません。データベース部分でさえ何もありません。SqlAlchemy に関するこの投稿を参照してください ( Why is SQLAlchemy insert with sqlite 25 times than using sqlite3 directly? ) で、メンテナーはいくつかの印象的なパフォーマンス ノートを指摘しています。整合性チェックなどを含む完全な ORM が関係している場合、同じ量の行に対して 16 秒になります。それは何もありません。
つまり、私のポイントは単純です。考慮すべき2つの要素は次のとおりです。
フレームワークを試して、どれが一番好きかを判断してください。ただし、パフォーマンス テストに時間を無駄にしないでください。時間を無駄にするだけです。
環境でアプリケーションを実行する方法によって異なります。Python Web アプリを実行するには、さまざまな方法があります。最近人気の方法は Gunicorn と uWSGI のようです。そのため、自分の環境で行うようにアプリケーションを実行するのが最善であり、プロセス モニターを使用して、アプリケーションを実行しているプロセスで使用されているメモリと CPU の量を確認できます。
ホスティング メカニズムの選択は、メモリ使用量の原因ではありません。それは、それらをどのように構成するかに加えて、実行することを決定したどのような太った Python Web アプリケーションです。
引用されているベンチマーク:
http://nichol.as/benchmark-of-python-web-servers
ベンチマークがかなり間違っている可能性がある場所の良い例です。
そのベンチマークのさまざまなホスティング メカニズムの構成は比較できないため、結果を使用してそれぞれのメモリ使用量を適切に評価することはできません。メモリが問題である場合、私はそのベンチマークにあまり注意を払いません。
メモリを無視すると、実際のボトルネックがどこにあるのかについての他のコメントのいくつかは有効です。この問題全体の詳細については、私の PyCon トークを参照してください。