7

重複の可能性:
PHP 致命的なエラー: メモリ不足 (割り当てられた 80740352) (12352 バイトを割り当てようとしました)

私たちは皆、このエラーを知っています:

Fatal error: Out of memory (allocated 32016932) (tried to allocate 25152 bytes)

このエラーを処理する方法はありますか? 多分実行される関数呼び出し?これは本当のスタック オーバーフローではなく、システムによって課された制限です。ここには少し柔軟性があると思うでしょう。大量のデータを処理のためにメモリにローカルにキャッシュしますが、ガベージ コレクション機能があります。メモリ使用量をチェックし、一定の制限を超えていればメモリを解放する機能のセットアップはすでにありますが、時々見逃してしまいます。この「致命的な」エラーで関数を呼び出すことができれば...まあ、理想的な世界では、プログラムは回復できるはずです。

私のphp.ini設定はmemory_limit = 500Mです。

何かご意見は?


これについてコメントを提供してくれたすべての人に感謝しますが、@Wrikken の優れた提案に感謝します。

これが私がやったことです:

declare(ticks=1);
register_tick_function('TickFunction');
function TickFunction() {
    if(memory_get_usage()>220000000) // 220M
    {
        GlobalDataStore::CheckMemory(); // my garbage collection function   
    }
}

私は php.ini のメモリ制限を実際に実行したいよりもはるかに高く設定しており、tick 関数がメモリの監視と必要に応じたメモリの解放を行います。

4

0 に答える 0