web-dev-qa-db-ja.com

PHP memory_limitの方が多いほど良いですか?

PHPでは、しばしばメモリ制限の問題に直面しています。特に、Drupalなどの高度にリソースが統合されたシステムでは。

ここで知りたいのは:

  • 2GBのような非常に高いphpメモリー制限があるのは良いですか?
  • 大きな欠点はありますか?

編集:

シナリオとして、たとえばDrupalでは、Webパネル(Drushやスクリプトではない)を介してキャッシュをクリアしている間、大量のメモリが必要です。したがって、この場合のみでも、現在512 MB前後の上限が必要です。

24
夏期劇場

黄金律:PHP what PHP need to work、and more more。

これにより、システムがPHPプロセスで不必要に詰まるという状況が防止され、バグの発見にも役立ちます(1GBのメモリを使用するスクリプトは珍しく、2GBのメモリ制限を与えると、それを隠す)。


例外的なケースでは、1つのスクリプトファイルのメモリが非常に多いことがわかっている場合、 ini_set() を使用して、実行時にメモリ制限ディレクティブを変更できます。 thisおよびthisを参照してください。

37
Madara's Ghost

いいえ、多いほど良くはありません。 単一スクリプトが消費できるメモリの量です。たとえば、サーバーに4 GBのメモリが搭載されている場合、2つのスクリプトのみが同時にすべてのメモリを消費する可能性があります。

一般的に、PHPスクリプトはメモリをほとんど使用しないでください。通常、スクリプトが予約するすべてのメモリは、終了時に解放されますが、明示的にunsetting変数を使用することで、その前にメモリをクリーンアップできます。これにより、スクリプトのメモリ効率を高めることができます。

4
GolezTrol

knowが大量のメモリを必要とするスクリプトがある場合、完全に安全で、上限を高く設定する必要があります。使用可能なメモリ量や実行中の他のアプリケーションに関してシステムの制限を高く設定すると、問題が発生する可能性があります。

また、メモリの制限が64 MBなどの場合、一部のデータを処理する無限ループに陥る可能性のあるスクリプトに欠陥があると、非常に速く停止することがよくあります。このシナリオでメモリ制限を4 GBにすると、システムが無限ループでフルティルトで長時間実行されたままになり、システム全体が応答しなくなる可能性があります。

しかし、私は4〜8 GBのメモリを搭載したシステムでは問題なく、約2〜4 GBのメモリ制限を持つ大規模なデータ処理アプリケーションを使用しました。他のユーザーが述べたように、これらのアプリケーションは1つのインスタンスであったことに注意してください。スクリプトの複数のインスタンスを実行するアプリケーションがある場合(ほとんどのWebアプリケーションがそうであるように)、各インスタンスで大量のメモリを使用することにより、重大な問題が発生します。メモリが不足し、メモリが解放されるまで、以降のクライアントはアプリケーションを使用できなくなります。

しかし、問題を隠すためにメモリ制限を増やすだけではありません。アプリケーションが多くのメモリを必要とする理由を調べ、まずそれを修正できるかどうかを確認します。

0
inquam