2016-06-13 9 views
-2

最近、私のアプリは最大許容メモリの枯渇に関する致命的なエラーを投げ始めました。いくつかの調査の後、私は制限が.htaccessファイルで設定され、64mに設定されていることを知りました。PHPメモリの上限を下げることの短所

試行された割り当ては約80MBで、私たちはこれらのリソースを提供することができますが、この変数の値を上げることが問題の良い解決策であるかどうかをコミュニティに尋ねました。 ありがとうありがとう

答えて

1

答えはあなたのスクリプトが何をしているかによって異なります:)あなたのケースの増加がかなり小さいと思います(64から80 MBまで、私は2の力にこだわることをお勧めしますそれを128MB btwに上げています)、最新のマシンではそれほど大きな違いはありません。しかし、それが正しいことであるかどうかを知るために、なぜあなたはより多くの記憶が必要かを知る必要があります。

あなたの処理が単にメモリを必要とする(例えば、アップロードされたファイルをメモリに処理している、大きなjsonまたはxml構造をデコードしている、またはメモリを大量に消費しているなど)場合は、

アプリケーションにメモリリークがあるか、非効率的な方法で書かれている場合は、メモリ制限を超過するだけで問題が隠蔽され、解決されません。あなたはおそらくこの問題にぶち当たって、実行可能でないすべての時間にメモリをアップさせるでしょう。

メモリ消費が急増した原因がわからない場合は、たとえばアプリケーションのプロファイリングをお勧めします。 xhprof。また、アプリの最後のいくつかの変更を見て、それが原因で何が起こっているのかを確認することもできます。それを正当化できる場合は、スクリプトのメモリを増やしてください。それ以外の場合は、まずコードを最適化してみてください。

+0

が最適化し、上記のメモリモデルを簡素化。 256-512 MBは一般的ではありません。しかし、残りのためにKatは絶対に正しいです。それを正当化できることを確認してください。 – giorgio

+0

ありがとう、非常に参考になりました – user69153

1

PHPは通常、PHPプロセスが複数のリクエストを処理する方法でデプロイされます。 1回のリクエスト中に、スクリプトはメモリを割り当てることができます。最後にこのメモリはフリーになります。ここまでは順調ですね。現在のところ、ほとんどのオペレーティングシステムは、解放されてもプロセスにバインドされたメモリを保持する方法で構築されています。メモリを必要とするプログラムをもう一度必要とするという前提があり、それを取り戻すよりもプロセスに利用可能な状態に保つほうが安いでしょう。したがって、PHPのデプロイメントでは、1つのリクエストが大量のメモリを必要とし、メモリがプロセスにバインドされ、システムで使用できなくなることがあります。さらに、予想よりも多くのメモリを必要とするプロセスがあると、バグの可能性があります。したがって、これらの2つの場合、memory_limitはセーフティネットとして機能します。

アプリケーションにメモリが必要な場合は、通常は上限を増やすことをお勧めします。 絶対値最大値はシステムに依存します(available RAM/number of worker processesは、必要な他のメモリを含まないため、おおよその式である場合があります)。

もちろんこれを変更するときは、他のシステムに移動するときに覚えておく必要があります。また、通常はメモリ使用量が少ないほど実行速度が速いため、コードを最適化できるかどうかを確認する必要があります。


サイドノート:私は意図的に仮想メモリページを無視し、どのオペレーティング・システムは、メモリの制限がさらに高い値に設定することができ

関連する問題