web-dev-qa-db-ja.com

大きなファイルをアップロードするときのApache2のメモリ使用量

Apache2.2.12をPHP 5.2.10。PHPは、fcgidを介して別個のプロセスとして実行するように構成されています。問題は、ユーザーがアップロードするときにファイルの場合、Apacheプロセスのサイズはほぼ同じ量だけ膨らみます。したがって、誰かが200 MBのファイルをアップロードしようとすると、子プロセスの1つが現在のサイズ+200 MBに膨らみます。2人のユーザーが同時にアップロードを開始すると、サーバーがクラッシュします。

現在、増加しているのは仮想メモリサイズですが、私はOpenVZベースのVPSを使用しているので、それが重要です。

私の質問は次のとおりです。

  • これは通常のApacheの動作ですか、それともこれを修正するために何かできるでしょうか?
  • そうでない場合は、大きなファイルのアップロードを処理するためのよりメモリ効率の高い方法がありますか。現在の動作では、アップロードを受け入れるApacheの子ごとに1GBの無料のRAM)が必要になります。

ありがとう!

アバヤ

-

4
abhaga

興味深い問題であり、phpの制限のようです。以下を参照してください。

どちらも最終的には「Use Java orPerl」など」と言っているようです。おそらくstackoverflowの誰かが答えを持っています。これほど大きなアップロードの場合、ユーザーの方法によってはsftpの方が適している可能性があります。フレンドリーである必要があります。

Php以外を使用する場合は、ファイルをチャンクに分割し、各チャンクをディスクにフラッシュできるため、 JUpload は適切なオプションのように見えます。それがphpでなければならない場合、 このstackoverflow post に従って、いくつかのソケットプログラミングでカスタムのものをロールアウトできる可能性があるようです。

このサイズでは、とにかく再開機能と進行機能を備えたものが必要になるでしょう。

1
Kyle Brandt