PHPマニュアルの記述のとおりに考えると、
memory_limit ≧ post_max_size ≧ upload_max_filesize
の関係である必要があるようです。(一般的に)
ところが、サーバのRAMが512MBしかありません。
1.memory_limitを有効にする場合、memory_limitに512MBよりも大きい数字を設定してもよいものなのでしょうか。(スワップありきの設定?)
2.memory_limitはpost_max_sizeよりも小さな値でも大丈夫なのでしょうか。
3.そもそも、RAMが512MBのサーバでPHPを利用して1GBのファイルをアップロードするのは難しいのでしょうか。(タイムアウトは長く設定するとして…)
これらについて、どれか1つでも構いませんので、出来る限り情報のソース付きでご教示いただけたらと思います。
よろしくお願いいたします。
1.仮想メモリがなんとかしてくれますが、1GBを4人が一斉にアップロードしたりすると、4GB分のメモリが使われてかなり不安定になります
(ECC付きメモリを使うと落ちにくくなりました)
2.動く場合と動かない場合がありました(linux系OSだと比較的安定)、memory_limit ≧ post_max_sizeにしたがったほうが無難そう
(memory_limit = -1で使用メモリ無制限)
3.かなり無謀です、サーバが市内にあっても失敗率高かったです、コメントのFTPにするなり、分割して上げてもらうなりするのが無難です
1.仮想メモリがなんとかしてくれますが、1GBを4人が一斉にアップロードしたりすると、4GB分のメモリが使われてかなり不安定になります
(ECC付きメモリを使うと落ちにくくなりました)
2.動く場合と動かない場合がありました(linux系OSだと比較的安定)、memory_limit ≧ post_max_sizeにしたがったほうが無難そう
(memory_limit = -1で使用メモリ無制限)
3.かなり無謀です、サーバが市内にあっても失敗率高かったです、コメントのFTPにするなり、分割して上げてもらうなりするのが無難です
>asideさん
回答ありがとうございます。
やはり厳しいですよね…。
スワップ領域を相当量取ってもどうか…というところでしょうか。
もし可能でしたら追加でご回答お願いしたいのですが、
「4GB分のメモリが使われて」とありますが、ファイルのアップロードの場合でも
POSTであれば一旦全ファイル容量分がメモリに蓄積されるのでしょうか。
memory_limit分だけ読んでは(ハードディスクに)書き、読んでは書き…というようなイメージではないのでしょうか。
よろしくお願いします。
"memory_limit"は、小さい値であれば、その数値以内でメモリの内容をテンポラリにフラッシュ(書き出す)するのだと思います。
実装済みのメモリ内かつPHPに割り当てて良い数値にしないとメモリを使い果たしてプロセスが落ちる可能性があると思います。
(ウォッチドッグ等の監視サービスによって監視されていれば)
時間が掛かる処理になるのであれば、その他に
max_execution_time の指定も必要です。
それ以内に終わらなければ、異常だと判断されて中断されます。
>snufkinskiさん
回答ありがとうございます。
一行目あたりのことについて詳しく書かれたページがあればありがたいのですが…。
max_execution_time の情報もありがとうございました。
今回はひとまず1GBというファイルサイズを諦めることにしました。
どうもありがとうございました。
>asideさん
回答ありがとうございます。
やはり厳しいですよね…。
スワップ領域を相当量取ってもどうか…というところでしょうか。
もし可能でしたら追加でご回答お願いしたいのですが、
「4GB分のメモリが使われて」とありますが、ファイルのアップロードの場合でも
POSTであれば一旦全ファイル容量分がメモリに蓄積されるのでしょうか。
memory_limit分だけ読んでは(ハードディスクに)書き、読んでは書き…というようなイメージではないのでしょうか。
よろしくお願いします。