奇怪的内存分配错误

时间:2017-12-12 19:05:41

标签: php

我遇到了臭名昭着的内存分配错误 所以,我有以下代码:

/** @var \Illuminate\Database\Eloquent\Collection|MPL[] $mpls */
foreach ($mpls as $index => $mpl) {
    $mplMIDs = [];
    $mpl->getMIDs(false, false)->each(function(MID $mid) use (&$mplMIDs) {
        if ($mid->isSingleLinked()) {
            $mplMIDs[] = $mid->mid_key;
        }
    });

    if (!$mplMIDs) {
        // most of the times the code enters here
        unset($mpls[$index]);
    }
    gc_collect_cycles() // working only if this adds this row
}

正如你所看到的那样。 $mpls数组,对于每个$mpl,我从数据库(MIDs函数)中获取getMIDs,然后为每个MID我检查是否是我所谓的singleLinked { {1}}(也调用数据库)。 关键是我有一个对象数组,我向它们插入更多对象,并向这些对象插入更多对象:

$mpls (array of objects) [
   $mpl (object) {
       $mids (array of objects) {
            $entities (array of objects)
       }
   }
   ... more $mpls... 
] 

出于某种原因,内存快速充满(大约20秒内1GB!)我认为unset应该修复它,但只有当我通过gc_collect_cycles强制执行垃圾收集时它才有用 也许它正在发生,因为对象是“深层”?

PHP版本:PHP 5.6.30
我得到错误:

PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 72 bytes) in /larvael/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 303

1 个答案:

答案 0 :(得分:0)

php.ini文件如果您找不到php.ini文件或无法访问它,请打开引发错误的文件 ini_set(“ memory_limit”,“ 16M”);