【问题标题】:Allowed memory size of 134217728 bytes exhausted (tried to allocate 42 bytes) [closed]允许的内存大小为 134217728 字节已用尽(尝试分配 42 字节)[关闭]
【发布时间】:2016-08-28 05:16:18
【问题描述】:

我正在从 mysql 表中检索记录,每个查询返回超过 0.2m 的行数,这显然会占用大量内存。就我而言,我的系统上安装了 8 GB 的 RAM,SSD 256 GB。 当我执行我的页面时,它返回以下错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 42 bytes) in D:\xampp\htdocs\classes\CRUD.php on line 84   

我认为我应该需要在表格行上使用线程而不是 php 循环? 也许我错了。任何建议/帮助将不胜感激。

【问题讨论】:

  • 这个应该在Server Fault问。
  • 您应该对结果进行分页以一次处理更少的结果,显然您的每个线程的内存限制在 php 配置中设置为 132Mb。你可以增加它
  • 写下你的代码,我们可以帮你。可能是该循环中的某些内容导致内存耗尽。
  • @peuh 你是对的,但是在我的代码中我不允许使用分页,否则这真的是一个非常好的建议。
  • 为什么要在 php 脚本中选择这么多行?通过仅选择使用的字段或使用“分页”来优化查询。

标签: php mysql loops


【解决方案1】:

默认 php.ini memory_limit 为 128 MB。您应该:

  • 优化您的代码以使用正常数量的数据
  • 将 php.ini 中的 memory_limit 更改为更高的值,我根本不建议这样做 - 使用您的方法,您将再次碰壁

【讨论】:

    【解决方案2】:

    您可以使用以下代码行从文件中扩展内存:

    ini_set('memory_limit','16M');
    

    将此代码添加到文件的顶部,然后将 16M 设置为您需要的任何内容,并且应该这样做。

    【讨论】:

    • 怎么样 => ini_set('memory_limit','2G');它会起作用吗?还是应该有其他好主意?
    • 你可以走得更高,但正如 Maciej Asembler 所说,不建议这样做。我的解决方案是快速修复。理想情况下,您需要简化您的应用程序。
    • 您还应该检查是否可以调用 ini_set。
    • 如果有 laravel 项目的人想知道把它放在哪里!如果代码是在网页调用中执行的,那么你需要把它放在
    • 嗨@AbdulRahman,我面临和你一样的问题。我已经增加到 500MB,但仍然不够。您是如何最终以有效的方式解决问题的?
    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 2013-08-09
    • 2021-12-29
    • 2017-07-23
    • 2018-02-23
    • 2014-11-20
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多