14

3 CPU コアの VDS に Nginx + uWSGI + Django をインストールしました。uWSGI は、プロセスごとに 6 つのプロセスと 5 つのスレッド用に構成されています。ここで、uWSGI に、すべてのプロセスがビジー状態になるまで負荷分散のためにプロセスを使用し、必要に応じてスレッドを使用するように指示したいと考えています。uWSGI はスレッドを好むようで、この動作を変更するための設定オプションが見つかりませんでした。最初のプロセスは 100% 以上の CPU 時間を使用し、2 つ目のプロセスは約 20% の CPU 時間を使用し、別のプロセスはほとんど使用されません。

私たちのサイトは 40 r/s を受信します。実際には、スレッドのない 3 つのプロセスでも、通常はすべての要求を処理するのに十分です。しかし、ロックされた共有リソースなどのさまざまな理由で、要求処理が時々ハングします。そのような場合、-1 プロセスがあります。ユーザーは待ってリンクを何度もクリックすることを好みません。その結果、すべてのプロセスがハングし、すべてのユーザーが待機する必要があります。

サーバーをより堅牢にするために、スレッドをさらに追加します。しかし、問題はおそらく python GIL です。スレッドはすべての CPU コアを使用しません。そのため、複数のプロセスがロード バランシングに適しています。ただし、共有リソースがロックされたり、I/O 待機が遅延したりする場合は、スレッドが大いに役立つ場合があります。スレッドの 1 つがロックされている間、プロセスは多くの作業を行う場合があります。

別の解決策がなくなるまで、制限時間を減らしたくありません。理論的にはスレッドでこの問題を解決することは可能です。ユーザーにエラー メッセージを表示したり、別の選択肢がなくなるまですべての要求を待機させたりしたくありません。

4

2 に答える 2

11

したがって、解決策は次のとおりです。

  1. uWSGI を最新の安定バージョンにアップグレードします (roberto が提案したように)。
  2. --thunder-lock オプションを使用します。

現在、プロセスごとに 50 のスレッドで実行しており、すべてのリクエストはプロセス間で均等に分散されています。

于 2013-10-11T20:05:35.613 に答える