1. ホーム
  2. php

PHPの許容メモリサイズがxxxバイトであることを解決する。

2022-02-22 08:47:55

今日、データを実行するためにデッドループを書いて、終わるまで終了しませんでした。その結果、実行が終了する前にPHPが赤ランプで表示されるようになりました。

致命的なエラーです。 許容メモリサイズ268435456バイト ハウスト <スパン <スパン d

( tr を許可した。 e 48 bytes) in D:\wwwmpaai nc ludefunctionaa.func.php on line 278

<スパン この問題には、2つの解決策があります。

ひとつは、PHP のメモリ制限を直接解除する方法です。 セット ("memory_limit","-1") とする。

次に、phpのメモリ制限を、ローカルメモリサイズを参照しながら、必要に応じて変更します。例えば、516Mに変更します。つまり ini_set("memory_limit","516M")

または、php.iniファイルでmemory_limit = 516Mに変更します。

<スパン でも、メモリ制限ってなんだろう?

phpの関連ドキュメントでは、memory_limitについて以下のように説明されています。

memory_limit: 整数
このディレクティブは、スクリプトが要求できるメモリの最大バイト数を設定します。これは、下手なスクリプトがサーバで利用可能なメモリをすべて消費してしまうことを 防ぐのに役立ちます。このディレクティブを使用するには、コンパイル時に有効にする必要があります。ですから、configure の行は以下を含む必要があります。-- 有効にする -memory-limit.は、メモリ制限が必要ない場合は、-1に設定する必要があります。php 4.3.2 以降、PHP の関数 memory_get_usage() は memory_limit が有効な場合に使用することができます。つまり、ページ内のphp処理のメモリ制限は、デフォルト(/etc/php.ini)では128Mと定義されていますが(私のシステムでのデフォルトインストール後)、その後、開発チームがより複雑なアプリケーションのために書きましたが、まだ少し構造が足りないかもしれませんし、実際に頻繁なオブジェクト要求でメモリ不足になりました。


<スパン 上記で述べたように、これを解決する最善の方法は、メモリ設定を常に増やすことではなく、アプリケーションレベルで行う必要があります。ページの最後に以下のように出力されるコードでテストを実行しました。

<?
printf(" total run: %.2f s<br>".
"メモリ使用量。%.2f M<br> "です。
マイクロ 時間 (true)-$HeaderTimeを指定します。
memory_get_usage() / 1024 / 1024 );
? >
その結果、愕然とするとしか言いようのないものが見えてきました。

総実行時間:1.47秒

メモリ使用量 77.09 M


1つのページで77Mものリクエストがあるなんて、驚きです。その理由は、プログラマーがコーディングをしていて、変数に値を代入するだけで、決して アンセット ($var) を上書きします。あるページへのリクエストが20のSQLクエリを処理し、それぞれが10のSQL結果を返すとしたら、プログラマはすべての コル 1行が10Kだとすると、処理終了までに10K * 10 * 20 = 2Mまでページを増やさなければなりません。*20 = 2M のアレイの割り当て、最もアレイを複製する必要がある場合もあるという事実は考慮されていません。

ですから、phpでは、その後にunset($var)を使う方が理にかなっているのです。結局のところ、まだリソースの制限があるのです。