【问题标题】:PHP: Out of memory exception but I've already changed the memory_limitPHP:内存不足异常,但我已经更改了 memory_limit
【发布时间】:2016-05-28 23:12:00
【问题描述】:

我收到了这个错误:

PHP Fatal error: Allowed memory size of X bytes exhausted

所以,经过一番研究,我更改了我的 php.ini 文件:

memory_limit: 2048M

上一条错误消息已停止,但我收到此错误:

Fatal error: Out of memory (allocated 1746927616) (tried to allocate 268435456 bytes) in [path]

所以我有 2048M 作为内存限制,并且在我的错误中,php 文件分配了 1666M 并试图分配 256M 给 1922M。这个值小于我的内存限制,为什么我会收到这个错误? (我检查了我的 IIS 站点中的 php 信息,内存限制是我之前提到的)。

谢谢:)

编辑:

就在发生此错误的那一行之前,我做了一个

echo memory_get_usage();

我得到了:

1675848

出错的代码是这样的:

for ($i = $startKey; $i <= $endKey; $i++) {
        array_push($paginas, $files[$i]);
}

【问题讨论】:

  • 你是否在更改后重新启动了 APACHE??
  • @devpro 我正在使用 IIS 并在更改 memory_limit 后重新启动服务器。之后错误消息发生了变化(到我在问题中显示的最后一条)。
  • 如果您在 Win32 上运行,您可能会达到每个进程 2Gb 的限制。剩下的 120Mb 左右可能被其他 PHP 数据和 Apache 本身使用。
  • 你的代码到底是什么?如此高的值大多不是实际的 memory_limit 问题,而是代码设计问题。你的程序在做什么,它真的需要 2GB 吗?

标签: php memory out-of-memory


【解决方案1】:

谢谢你的提示。这实际上是一个代码设计问题。这不是我的代码(我已经开始在一个已经存在的项目中工作)所以调试和决定我是否寻找一些配置错误或假设代码是错误的有点困难。当我第一次搜索错误时,我发现很多人都遇到了同样的问题,以至于我愚蠢地排除了错误的代码(并且错误在处理文件的部分中出现了)。

所以,就我而言,按照这里的建议,我开始查看我的代码并使用了

echo memory_get_usage();

查看所有内存是否真的在该行代码中分配,并找出这是真的。然后我检查了循环变量,有时第一个变量没有正确初始化,结果是一个没有结束的循环。

谢谢大家,麻烦你了:)

【讨论】:

    【解决方案2】:

    当您分配内存时,您实际上是在请求一个连续的块。因此,可能发生的情况是,它具有所需的总内存,但它被分成两个或更多块。

    【讨论】:

      猜你喜欢
      • 2015-02-12
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2010-10-05
      相关资源
      最近更新 更多