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



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

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

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

memory_get_peak_usage();

我得到了7254128,它还远远没有耗尽268435456

我检查了多个地方,内存使用量并没有急剧增加,所以我真的不知道问题出在哪里!

同样的脚本在我的本地计算机上运行得很好,我在php.ini文件中将内存限制设置为仅16M

这是导致问题的代码,但我认为它不会真正有用,它来自一个问题插件2和一个开源平台:

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');
}

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

解决这个问题的最简单方法是切换到使用MySQL ND连接器,该连接器没有这个"功能">

SQL查询的PHP大量内存使用

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

我用memory_get_peak_usage();我得到了7254128,这与268435456筋疲力尽!

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

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

最新更新