27

PHP では、メモリ制限の問題に直面することがよくあります。特に、Drupal などの高度にリソースが統合されたシステムでは。

ここで知りたいことは次のとおりです。

  • 2GB のように非常に高い PHP メモリ制限を持つことは良いことですか?
  • 大きな欠点はありますか?

編集:

シナリオとして、たとえば Drupal では、(Drush やその他のスクリプトではなく) Web パネルを介して CACHE をクリアしている間、非常に多くのメモリが必要になります。したがって、この場合だけでも、現在 512MB 前後の上限が確実に必要です。

4

3 に答える 3

43

黄金律:PHPが機能するために必要なものだけをPHPに与え、それ以上は何も与えない。

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


例外的なケースでは、単一のスクリプトファイルが非常にメモリを大量に消費することがわかっている場合、ini_set()実行時にメモリ制限ディレクティブを変更するために使用できます。これこれを参照してください。

于 2012-10-12T11:53:34.667 に答える
4

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

一般に、PHPスクリプトはほとんどメモリを使用しないはずです。unset通常、スクリプトが予約しているすべてのメモリは、スクリプトが終了すると解放されますが、実行中に不要になった変数を明示的に指定することで、その前にメモリをクリーンアップできます。そうすることで、スクリプトのメモリ効率を高めることができます。

于 2012-10-12T11:55:58.850 に答える
0

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

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

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

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

于 2012-10-12T11:55:43.717 に答える