0

すべてのRackアプリケーションサーバー( UnicornPassengerの経験があります)は、作成時にすべてのワーカーに対して単一のプロセスを作成しており、その状態は「凍結」されていたと確信していました。

アプリサーバーが処理要求を受信するたびに、マスタープロセスからフォークされ、フォークされたプロセスへのそれ以降のすべての変更は元のプロセスから分離されます。それらはコピーオンライトの最適化の恩恵を受けており、リクエストの処理によって「損傷」しても安全です。環境へのすべての変更は、とにかくプリエンプトされる単一のプロセスにのみ影響します。

RoRアプリケーションスタックの私のビジョンが正しければ、単一のリクエストの処理に多くの時間とメモリがかかる場合を除いて、ガベージコレクションはほとんど必要ありません(通常はそうではありません)。

一方、NewRelicで行われたGC測定についての質問とその答えから、私は完全に間違っているに違いないと結論付けました。

誰かがこのプロセスを明確にすることができますか?

4

1 に答える 1

2

ラックアプリケーションサーバーは、初期化中にのみ、各要求でフォークしません。

  1. まず、環境が1つのプロセスで読み込まれます
  2. 次に、サーバーは複数のワーカーをフォークします
  3. 次に、すべてのリクエストがこれらのプロセスに分散されます

そのため、ガベージコレクターを使用して、各プロセスのメモリをクリーンで安定した状態に保ちます。

于 2012-11-23T16:03:07.607 に答える