允许的内存大小已耗尽,但memory_get_peak_usage则另有说明

时间:2012-12-12 22:05:54

标签: php memory-limit question2answer

在我的服务器上,我有以下错误:

  

允许的内存大小为268435456字节耗尽

这发生在一个循环(一个foreach)中,当我在循环中检查内存使用情况

memory_get_peak_usage();

我获得的7254128远离268435456耗尽!

我在多个地方检查过,内存使用量没有大幅增加,所以我真的不知道问题在哪里!

我的本​​地计算机上的相同脚本运行正常,我在16M文件中将内存限制设置为php.ini

以下是导致问题的代码,但我认为它不会真正有用,它来自于question2answer开源平台的插件:

foreach ($badges as $slug => $info) {
    $badge_name=qa_badge_name($slug);
    if(!qa_opt('badge_'.$slug.'_name')) 
            qa_opt('badge_'.$slug.'_name',$badge_name);
    $name = qa_opt('badge_'.$slug.'_name');
}

1 个答案:

答案 0 :(得分:1)

我强烈怀疑您的问题是由于标准MySQL连接器库中的“错误功能”造成的。当从数据库中提取包含“long blob”或“long text”字段的行时。 MySQL库不是分配数据所需的确切大小,而是尝试分配存储行可能需要的最大大小。即4千兆字节的内存。

解决此问题的最简单方法是切换到使用没有此“功能”的MySQL ND连接器

PHP massive memory usage for SQL query

Allowed memory size of 67108864 bytes exhausted

  

我正在检查循环中的内存使用情况   memory_get_peak_usage();我获得了远离的7254128   268435456筋疲力尽!

这是正确的。内存分配失败,因此峰值内存使用率从未显示使用中的巨大分配。

btw您应该能够将错误消息跟踪到产生失败的内存分配错误的确切代码行。如果它不是来自SQL提取,那么答案可能是错误的。