gpt4 book ai didi

php - php内存不足错误

转载 作者:可可西里 更新时间:2023-11-01 08:51:34 27 4
gpt4 key购买 nike

我在 php 5.2.5 上并从命令行执行脚本。在这个脚本中,我正在处理从数据库中获取的数据。要从数据库中获取数据,我使用的是 Zend Adapter。我注意到调用后内存增加(262144 字节) “fetchAll($sql,$data,Zend_Db::FETCH_ASSOC)”

因此最终导致内存不足。为了测试,我只是执行了“fetchAll”,甚至没有将它返回的数据存储在任何变量中。但我仍然看到未回收的内存增加。

  • Zend FetchAll 方法是否存在内存泄漏问题?
  • 为什么内存会增加 262144 或 262144 的倍数?
  • 内存增加是随机发生的,而不是在所有 fetchAll 调用中,为什么会这样?

我曾尝试使用 memory_get_usage() 来确定内存泄漏的原因,但由于代码庞大,需要花费大量时间,有什么方法可以获取内存中所有对象的详细信息,以便我可以更好地调试问题吗?

SQL 是:-

select b.Id as Id,b.Lang 
from groups g
left join table1 b on b.Group_Id = g.Id
left join table2 bs on bs.Id = b.Id
where g.Id = ? and b.Lang = ?

最佳答案

要一次返回所有结果,它们必须存储在内存中的数组中。即使您没有将该结果分配给任何变量,fetchAll 内部仍然必须构建该数组。如果有太多的结果不能一次存储在内存中,你就会耗尽内存;很简单。

至于为什么内存总是不回收:可能有内存泄漏,但更有可能是PHP的垃圾收集器没有立即启动回收内存。您可以尝试使用 gc_collect_cycles 强制执行 gc 循环确认这一点。

关于php - php内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13229395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com