PHP プロセスのメモリ オーバーフローを防ぐためのトラブルシューティング

藏色散人
リリース: 2023-04-08 22:50:01
転載
2469 人が閲覧しました

PHP プロセスのメモリ サイズを設定できます。デフォルトは設定ファイルにあります。memory_limit=128M

プログラム内で動的に設定することもできます。 ini_set('memory_limit', '1024M');これにより、1G に設定されます。ただし、この設定はマシンの他のサービスに影響を与えるため、通常は行われません。コードを確認できる場合もありますが、多くの場合、メモリ オーバーフローは、PHP 変数が時間内に解放されなかったり、比較的大きな配列を走査したりしたときに発生します。

1. トラブルシューティング

memory_get_usage() PHP には、現在のプロセスによって使用されているメモリ空間の量を取得するこのシステム関数があります。戻り値はバイト単位 round(memory_get_usage()/1024/1024, 2).'MB' で、追跡するために MB.

に変換できます。コード実行プロセスのメモリが変更されます。

2. 一般的なメモリ オーバーフローのケース

大きな配列を走査し、配列の一部の値を変更すると、走査プロセス中に配列のコピーが作成されます。

PHP 変数の特徴は「コピーオンライト」です。

$arr 配列の代入に関しては、分割されて新しい HashTable 構造が生成され、メモリ使用量が発生します。 Big

3. トラバースして他の変数を割り当てる

$arr = range(0, 599999);
echo &#39;foreach前内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
foreach($arr as $key => $item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo &#39;foreach中内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
    }
}
echo &#39;foreach后内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;

//输出
/*
foreach前内存:49.9MB
foreach中内存:81.36MB
foreach中内存:84.42MB
foreach中内存:87.47MB
foreach中内存:90.52MB
foreach中内存:93.57MB
foreach中内存:96.62MB
foreach后内存:49.9MB
*/
ログイン後にコピー

解決策は、参照トラバーサルを使用することです

$arr = range(0, 599999);
echo &#39;foreach前内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;

foreach($arr as $key => &$item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo &#39;foreach中内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
    }
}unset($key);unset($item);
ログイン後にコピー

走査が完了したら、忘れずに unset($key);unset($item); $item は配列の最後の要素への参照であるため、後でこの変数を変更すると、配列に直接変更できます。

推奨: 「PHP ビデオ チュートリアル

以上がPHP プロセスのメモリ オーバーフローを防ぐためのトラブルシューティングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート