【问题标题】:PHP Fatal error: Allowed memory size - on a non-existent linePHP 致命错误:允许的内存大小 - 在不存在的行上
【发布时间】:2012-02-22 00:20:03
【问题描述】:

我有时会在生产服务器中看到此错误(我的意思是,这似乎是随机的,因为我的网站流量不错,到目前为止它只发生了 5 次):

[21-Feb-2012 23:43:19 UTC] PHP 致命错误:第 1811 行 /home/xxxxx/xxxxx/xxx.php 中允许的内存大小为 67108864 字节已用尽(尝试分配 261900 字节)

有趣的是,文件只有 798 行,这在我之前从未发生过。
这可能与我最近对脚本所做的更改有关,是的,但这个错误对我来说根本没有意义。

请记住,我知道“允许的内存大小已用尽”错误的含义,并且我知道如何增加内存限制。
但是,我的问题是,为什么 PHP 指的是不存在的行?
我不知道如何解决这个问题,因为这对我来说毫无意义。

谢谢。

【问题讨论】:

  • 也许它包含一个文件并且该文件失败了。而且服务器可能正在执行诸如自动加载之类的操作。
  • 旧的 /home/xxxxx/xxxxx/xxx.php 是否更长,您是否有某种操作码缓存?
  • 如果我们能从有问题的文件中看到一些代码会有所帮助。
  • @jakx - 它包括许多文件。 “失败”是什么意思?如果内存问题出在该包含的文件上,那么引用该文件的错误是有意义的,对吗? “自动加载”是什么意思?
  • 远景:检查特定文件的修改日期,看看它是否被更改

标签: php memory


【解决方案1】:

我刚刚找到了导致此内存泄漏的原因。

这是最近在两个函数之间的递归循环中发生的变化,尽管这是一个罕见的事件。

第 1811 行是真实的,是的,但是错误引用的文件不正确。第 1811 行来自另一个文件(包含在引用的文件中),其中一个函数位于其中。

我仍然感谢上面评论的人的帮助。

【讨论】:

  • 刚刚有同样的事情。在我的情况下,lib A 调用 lib B(递归地,直到它耗尽内存,这是错误)。但是 PHP 使用 lib A 中的行号报告了内存错误,但是 lib B 的文件路径(没有那么多行)。非常混乱。感谢您的提示。
  • 很高兴这对您有所帮助!
猜你喜欢
  • 2015-04-22
  • 2023-03-20
  • 2017-12-13
  • 2015-09-18
  • 2023-04-03
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多