我们都知道这个错误:
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 函数负责内存监控并根据需要释放内存。