内存溢出问题的解决方案

时间:2022-12-22 20:57:44

内存溢出: out of memory 是指程序运行实际所需要的内存超出了系统能够分配给它的最大内存时,就会导致out of memory。

比如,PHP脚本默认申请的最大内存是128M,如果脚本执行过程中实际需要的内存超过了128M,就会导致内存溢出。

内存泄露: memory leak 是指程序中已动态分配的内存,由于某种原因程序未及时释放或无法释放,从而造成内存的浪费。

一次内存泄露的危害可以忽略,但内存泄露堆积的后果很严重,无论多大内存,迟早会被用尽。内存泄漏最终可能导致内存溢出。

数据统计时,如果一次性查询出所有的数据,数据量太大,就可能导致内存溢出。

解决方案有两种:

  • 修改PHP脚本可用内存的大小

    // 临时设置php可以使用的内存大小为512M,在safe_mode(安全模式)下,ini_set无效
    ini_set('memory_limit', '512M');
  • 对数据进行分批处理,并及时销毁(unset)用过的变量

另外,为了节省PHP脚本对内存的损耗,应尽可能减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。

如果一个变量被其他变量引用,unset销毁变量时,应该将该变量及其相关的引用变量也销毁。