>伙计们,关于这种错误和解决的主题很少,尽管我的情况是我有一个 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大,也比265553811和其他安装268435456我收到的东西。有人可以解释为什么它以这种方式计算或分享链接,我可以在其中阅读更多有关此的信息。
亲切问候
我宁愿将其作为评论添加到Halayem Anis的评论中,因为这是答案,但我还不能。这更像只是一个解释。
当错误显示"无法分配 X 字节"时,这是对现有内存使用情况的补充。 如果您的 PHP 脚本已经在使用 200000000 字节的内存,并且它尝试分配 265556016 个字节,则265556016 + 200000000 将465556016这超过了268435456的内存限制。
您需要配置多请求以发出更少的请求(我不知道该软件,但基于 github,它会发出一堆 CURL 请求。另一种选择是将系统配置为为 PHP 提供更多内存。这是通过 PHP.ini/ini_set 文件memory_limit
选项或主机配置的内容完成的。
您需要为脚本或所有 php 配置分配更多内存,/etc/php5/cli/php.ini
您可以通过修改 memory_limit = 256
memory_limit = -1
意味着在需要时使用您拥有的所有内存。或者您可以在脚本中使用ini_set('memory_limit', '512M');
PHP还没有一个非常智能的garbage-colector
通常所有的内存在脚本完成后被释放,通常我制作skip
,count
类型的脚本,并从bash
执行我的脚本。
skip=0
count=0
while [ ! exiting_clause ]
do
php script.php --skip="$skip" --count="$count"
skip=$(($skip+$count))
done
通过这种方式,我可以迭代我的所有数据,但在多个实例中,通常您将获得一些性能,并且内存使用量大大减少。