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

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

私は apache2.2.12 を PHP 5.2.10 とともに実行しています。PHP は fcgid を介して別のプロセスとして実行するように設定されています。問題は、ユーザーがファイルをアップロードすると、apache プロセスのサイズがほぼ同じ量だけ増大することです。そのため、誰かが 200 MB のファイルをアップロードしようとすると、子プロセスの 1 つが現在のサイズ + 200 MB に増大します。2 人のユーザーが同時にアップロードを開始すると、サーバーがクラッシュします。

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

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

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

ありがとう!

アバヤ

-

答え1

興味深い問題ですが、これは PHP の制限のようです。以下を参照してください。

結局、どちらも「Java または Perl を使用する」などと言っているようです。おそらく、stackoverflow の誰かが答えを持っているでしょう。これほど大きなアップロードの場合、ユーザー フレンドリーさがどの程度必要かにもよりますが、sftp の方が適切なソリューションかもしれません。

PHP以外のものを使用する場合は、Jアップロードファイルをチャンクに分割して各チャンクをディスクに書き出すことができるので、良い選択肢のようです。PHPでなければならない場合は、ソケットプログラミングを使用してカスタムのロールアウトが可能になるようです。このstackoverflowの投稿

このサイズであれば、再開機能と進捗状況機能を備えたものが必要になるでしょう。

関連情報