2016-04-26 9 views
6

私はいくつかのアプリをuWSGI上で実行しています。それらのほとんどは、時間の経過とともにメモリ使用量が増加します。私はいつもこれを私が追跡していないメモリリークに帰してきた。しかし最近、私は成長がかなりチャンクであることに気づいた。私は各チャンクが開始されているプロセスと相関しているのだろうかと思います。uWSGIはブート時にすべてのプロセスを起動しますか?

uWSGIはブート時にすべてのプロセスを開始するのですか、または必要な場合に十分な要求が入ったときにのみ新しいプロセスを起動しますか?

ここでは例の設定があります:

[uwsgi] 
strict = true 

wsgi-file = foo.py 
callable = app 

die-on-term = true 

http-socket = :2345 

master = true 
enable-threads = true 
thunder-lock = true 
processes = 6 
threads = 1 

memory-report = true 

更新:これは、関連になります。http://uwsgi-docs.readthedocs.org/en/latest/Cheaper.html

は "労働者"(答えはyesのようです)、 "プロセス" と同じことを意味していますか?もしそうなら、私が数は常に一定に維持する場合のように、私がすべきと思われる。

cheaper = 6 
cheaper-initial = 6 
processes = 6 

答えて

6

はい、uWSGIは、すべてのプロセスを開始します(または労働者 - 労働者はuWSGI設定での処理のための別名である)ブート時にそれはあなたのアプリケーションに依存します。アプリケーションが起動時にすべてのモジュールをインポートする場合は、最初の要求前に完全にロードする必要がありますが、要求時にロードされるモジュールがある場合は、最初の要求後に各作業者が完全にロードされますすべてをロードするリクエストの組み合わせを実行した後にのみ、完全にロードされます)。

すべてのモジュールをロードした後でも、アプリケーションのメモリ使用量は一定ではありません。すべての要求に蓄積されるいくつかのロギング、グローバル変数、デバッグ情報などがあります。任意のフレームワークを使用している場合、デバッグや統計などのためにデータを保存する可能性があります。

デフォルトでは、安価ではありません。つまり、起動時にuWSGIがすべてのワーカーを起動します。安価なモードを使用する場合は、少なくともcheaperパラメータを定義する必要があります。安価なシステムの使用について詳しくはdocumentation

uWSGIには、要求量に基づいて負荷を制御するためのシステムが多数組み込まれています。例えば

あなたはuWSGIがあまりにも多くのリソースを占有することを心配している場合は、そのためのソリューションがあまりにもあります

+0

を実行しているおかげで!ええ、私はモジュールのロードやメモリの増加に影響を与える他のことを知っていましたが、私はプロセスの起動について疑問を抱いていました。あなたはより安い設定が何であるか知っていますか? –

+0

安価な設定は、起動時にワーカーの起動を防ぎ、代わりに最初の要求時に実行します。起動時に生成されるワーカーの数、(必要に応じて)要求で生成されるワーカーの数、および要求に基づいて生成されたワーカーがもはや必要でない場合に自動的に殺されるべきかどうかを指定できます。 – GwynBleidD

+0

uwsgiが使用するデフォルトのシステムは安価ですが、これらの設定は動作を構成するか、設定を使用するとアクティブになる特別なモードですか? –

関連する問題