Apache で fastCGI を介して実行している単純な perl スクリプトを作成しました。アプリケーションは、着信要求のクエリ パラメータに基づいて値を検索するために使用される一連の XML データ ファイルをロードします。私が理解しているように、アプリケーションが処理できる同時リクエストの量を増やしたい場合は、fastCGI が複数のプロセスを生成できるようにする必要があります。これらの各プロセスは、XML データの重複したコピーをメモリに保持する必要がありますか? XML データの 1 つのコピーをメモリにロードしながら同時に要求を処理する容量を増やすように設定する方法はありますか?
2 に答える
段落記号が正しく答えたように、FastCGIはプロセス間でデータを共有する特別な方法を提供せず、メモリ使用量を削減する従来の方法をリストします。
もう1つの可能性は、永続的な非FastCGIプロセスにXMLファイルを読み取らせ、FastCGIプロセスのデータサーバーとして機能させることです。これの効率は、クエリがどれほど複雑で、どれだけのデータを出し入れする必要があるかに依存しますが、データの単一のコピーをメモリに残すことができます。
メモリは、通常の個別のプロセス間と同様に、個別の FastCGI プロセス間で共有されます。つまり、ここでの目的では、データは共有されません。
(FastCGI を使用すると、単一のプロセスで複数のリクエストを連続して処理できるため、たとえば、そのプロセスによって最初にサービスが提供された後の各リクエストで、再初期化、構成および XML データの再読み取りの必要がなくなります。)
利点として、個別のプロセス間で XML のメモリ内フットプリントを削減するために機能する手法は、ここでも機能するはずです。ファイルを共有メモリ(同期と更新が難しい場合があります)に読み込むか、低メモリの XML パーサーを選択するか、XML データの「コンパイル済み」GDBMや作成したカスタム サーバーなどを介して間接的に情報にアクセスすることができます。質問に答える。