今天一上班,发现维护的网站除了问题,看了debug之后,总是出现
Fatal error: Out of memory (allocated 243007488) (tried to allocate 36 bytes)
上网查了后看到是php在执行代码时,内存不够。随机修改php.ini中的memory_limit的值,设置成512。
重启php,测试还是失败,程序还是报之前的错。之后查看了代码和数据库,发现在控制器的方法有一个全表查询的代码,导致内存溢出。
$ret = Db::name('locus') -> select();
$time = array();
foreach ($ret as $key => $value){
$time[] = $value['time'];
if(strtotime($time[$key]) == false){
Db::name('locus') ->where('time','=',"$time[$key]") ->delete();
}
}
上面这个代码完全是从全表来查,数据量很大。
删除这一段代码,测试成功。
从以上可以得出,代码中一定要避免大数据量的查询,在条件允许的条件下可以执行。要么做严谨的try catch,要么去分表,这样保证数据的正常使用。
网友评论