web-dev-qa-db-ja.com

PHP + Apache + Windows 32ビットのメモリ制限?

Windows 2008 R264ビット/ 16GBサーバーへの Moodle インストールにApache32ビットを使用することを検討しています。使用可能なメモリは、サービスを提供できる同時ユーザー数に影響するため、32ビットWindowsプロセスの2GBのメモリ制限がApache + PHPにどのように影響するのか疑問に思いました。

サーバー全体の集合的な制限ですか、それともApacheの子プロセス/スレッドごとに個別に適用されますか?

それが分離している場合、それらの子の何人がWindowsで起動されますか?リクエストごとに1つ?プロセッサコアごとに1つ?途中で何か?これはどういうわけか構成可能ですか?

2
thkala

免責事項:私はWindows管理者ではありません。 Apache 2に関するこのような最も一般的なセットアップは、構成可能なスレッドプールサイズ(デフォルトは250程度)でwinntマルチプロセッシングモジュール(MPM)を使用することだと思います。これは、多くのスレッドを持つ単一のプロセスがあることを意味します。そのため、プロセスは2G制限の対象となります。

Apache2の優れた点の1つは、さまざまなMPMスキームをサポートしているため、最適なスキームを選択できることです。ここでは、勝者のMPMである可能性があります(または、そうである必要があるかもしれませんが、確かではありません)。

これがお役に立てば幸いです。 -マット

0
mcauth

まず、質問をしている場合は、 さまざまなバージョンのWindowsのメモリ制限 を確認することをお勧めします。 OSが2GBまたは4GBのRAMに制限している場合、複数のApacheプロセスを生成してもあまり効果はありません。また、プロセスごとのメモリ制限は、アプリケーション自体に基づいて変動することに注意してください。

次に、プロセスあたり2GBの制限が各プロセスに適用されます。他のプロセスの子プロセスであるかどうかに関係なく、どのプロセスにも最大2GBのメモリを割り当てることができます。マルチスレッドプロセスは依然としてプロセスであるため、そのように制限を回避する必要はありません。

最後に、Apache(またはWindows?)プロセスの動作を理解していないようです。 launch [x] processes of [y] applicationまたは[x] processes of [y] application per [z] coresのグローバル構成はなく、httpリクエストごとに新しいApacheプロセスを取得するわけではないので、質問のこの部分はやや...答えられない。アプリケーションが起動するプロセスの数は、アプリケーション(およびある程度はユーザー)によって定義されます。たとえば、IEの各タブは独自のプロセスですが、Firefoxの各タブはそうではありません。

ただし、同じプロセスの複数のインスタンスを起動してメモリ制限を回避することはおそらく良い考えではないことをお勧めします。アプリケーションに実際に必要なだけのメモリを持たせることをネイティブにサポートするバージョンのWindowsを入手する必要があります(または扱う)。あなた(または他の誰か)が問題のトラブルシューティングを行う必要がある場合に何が起こるかを検討し、32個のApacheインスタンスを実行しているWebサーバーにステップインして、プロセスあたり2 GBの制限を「回避」し、最大許容OS制限である64GBを利用します。羊。誰かが殺されるだろう。

1
HopelessN00b