允许的内存大小为268435456字节耗尽(尝试分配265556016字节)

时间:2015-02-03 07:36:11

标签: php codeigniter curl cron

那些关于这种错误和解决的主题很少,虽然我的情况是我有一个cronjob什么是使用多查询请求对数据库进行一些更新查询。我设置为收到错误电子邮件,因为内存问题,我每天接近200。它们连接到:

system/application/libraries/MultiRequest/Handler.php. On line 132 :

while(CURLM_CALL_MULTI_PERFORM === curl_multi_exec($mcurlHandle, $activeThreads)) {

以及:

system/application/libraries/MultiRequest/Request.php. On line 187 :

$responseData = curl_multi_getcontent($curlHandle);

我没有得到一件事:

268435456大于265556016,还有268435456比265553811和其他坐骑我收到的。有人可以解释我为什么要按照这种方式计算或分享链接,我可以在这里阅读更多相关信息。

亲切的问候

2 个答案:

答案 0 :(得分:2)

我宁愿将此作为对Halayem Anis评论的评论,因为这是答案,但我还不能。这不仅仅是一种解释。

当错误显示“无法分配X字节”时,这是现有内存使用量的补充。如果您的PHP脚本已经使用了200000000字节的内存并且它尝试分配265556016字节,则265556016 + 200000000将是465556016,这超过内存限制268435456.。

您需要配置Multirequest以减少请求(我不知道软件,但基于github它会产生一堆CURL请求。)另一个选择是配置系统以允许更多内存用于PHP。这可以通过PHP.ini / ini_set文件memory_limit选项或主机配置来完成。

答案 1 :(得分:0)

您需要为脚本或所有php配置分配更多内存,您可以通过修改/etc/php5/cli/php.ini来实现 memory_limit = 256memory_limit = -1表示如果需要,请使用您拥有的所有内存。 或者您可以在脚本中使用ini_set('memory_limit', '512M');

PHP还没有(还)一个非常聪明的garbage-colector,并且通常在脚本完成时释放所有内存,通常我会生成skipcount类型的脚本并且bash我正在执行我的脚本。

skip=0
count=0
while [ ! exiting_clause ]
do
   php script.php --skip="$skip" --count="$count"
   skip=$(($skip+$count))
done

这样我在所有数据中迭代但在多个实例中,通常你会获得一些性能,并且内存使用量会少很多。