【问题标题】:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes)致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 87 字节)
【发布时间】:2011-09-27 03:58:17
【问题描述】:

当我登录到我的网络应用程序时,它会显示如下错误:

致命错误:在 /gt/2.ps.fo/home/hft/domains/console.fo.spalgo.com/public_html/cake/libs/ 中允许的内存大小为 134217728 字节已用尽(尝试分配 87 字节) model/datasources/dbo/dbo_mysql.php 在第 775 行

有什么办法可以解决这个问题吗?为什么会出现此错误?

【问题讨论】:

  • 这意味着你的代码正在做一些耗尽所有可用内存的事情。修复它,使其使用更少的内存和/或更少。

标签: php cakephp


【解决方案1】:

听起来你已经分配了more memory than PHP will allow。按照链接页面上的说明,在您的站点 php.ini 配置中编辑 memory_limit 设置。

另一种可能性(不太可能)是您的用户或组已达到setrlimit(2) 资源限制。检查 /etc/security/limits.conf 以了解可能为您的 Web 服务器设置的限制,以及启动您的服务器环境和 PHP 解释器环境的任何初始化脚本。

【讨论】:

  • 虽然这两种说法都是可能的,但它更可能与内存限制有关,但是,只是增加它,认为它会解决它,它可能不是正确的解决方案,因为你必须检查为什么是分配这么多内存的单个脚本。为了补充您的答案,我添加了另一个。
【解决方案2】:

我通过搜索“PHP out of memory”找到的第一个示例是this one

【讨论】:

    【解决方案3】:

    尝试使用echo,而不是先将要打印的内容存储到变量中。

    【讨论】:

      【解决方案4】:

      查看引发致命异常 (dbo_mysql.php) 的文件,我推测您的调用正在从数据库中检索数据。

      此外,查看内存限制,它显示 134217728 字节,即 128MB,所以我认为无论您的 API 调用在做什么,都试图获取大量数据,这些数据总计超过了每个脚本分配的限制。
      例如,如果 API 调用堆栈中的最后一个脚本要使用 20MB 来满足其需要,然后厌倦了从数据库中获取价值 115MB 的数据,那么您的脚本将尝试分配 135MB 这已经是 @987654325 @超过限制,从而导致Fatal Exception

      所以,我看到了一些需要检查/做的事情:

      1. 您不会检索不必要的数据,或者换句话说,只检索您需要的数据。
      2. 如果您确实需要所有这些数据,那么
        • 要么增加 php.ini 文件下的 memory_limit
          缺点:如果您的数据不断增长,您可能需要不断更新该值以获取唯一一个脚本并暴露您的self 到内存泄漏或内存不足。
        • 或者我会建议您实现某种分页(这将允许您控制内存限制)并使您的应用程序更具可扩展性。

      【讨论】:

        【解决方案5】:
        ini_set('memory_limit', '-1');
        

        【讨论】:

        • -1 表示无限内存,可以泄露。你应该避免这种配置,当你别无选择时使用它。
        猜你喜欢
        • 2015-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-09-26
        • 2011-04-10
        • 1970-01-01
        • 2018-08-01
        • 2011-09-14
        • 1970-01-01
        相关资源
        最近更新 更多