现象描述:
命令行执行一个7万行的脚本,循环里进行各种查询。结果每次都会报出内存溢出的错误,类似于这样:
第 475 次,消耗内存 312.68MB第 476 次,消耗内存 313.22MB第 477 次,消耗内存 313.79MB。还是报错。内存溢出。Allowed memory size of 402653184 bytes exhausted (tried to allocate 8388616 bytes) (手打日志记录)
经过分析,是不是存在没有及时销毁的变量,于是销毁了所有可能会影响性能的变量。然而发现内存还是不断上升。我很懵逼。
接着我就一段一段的进行调试,
foreach ($query->batch(100, Yii::$app->slave_db_ss) as $items)
{
//100数据循环中...
$upt_data = [];
foreach ($items as $item){
... //中间代码全部注释
}
}
这样注释了之后发现,很快就执行完了十几万数据。于是还是一段一段的在循环里注释。这里可以发现yii框架自带的这种循环大数据还是蛮好用的。
一直查,最终问题定位在一个这样的问题里:
$tb