【问题标题】:Fatal error: Out of memory when adding post in WP致命错误:在 WP 中添加帖子时内存不足
【发布时间】:2013-04-06 05:48:25
【问题描述】:

我收到了这个讨厌的错误Fatal error: Out of memory (allocated 18087936) (tried to allocate 77824 bytes)。奇怪的是,它是 17,25 mb(已分配),它试图分配 76 kb。内存限制为 128MB,如您所见,它甚至还没有接近。 VPS 在那一刻获得了约 400mb 的免费内存。它仅在我发布某些内容时发生,而不是一直发生。 我觉得很奇怪,不知道是什么原因造成的。 如果您需要任何其他信息,请告诉我。

【问题讨论】:

  • 是否说明发生在哪个文件上?
  • 注册关机功能(如this)。添加一些代码来记录机器状态(当前内存消耗,可用内存等)分析日志,很可能在出错的那一刻可用内存真的很短。
  • 您正在使用哪些 WP 模块,您能辨别出发生这种情况的文件的任何模式吗?也许它们都属于一个模块或都与一项任务相关?
  • 可以添加ini_set('memory_limit', '128M');在您的代码中内联并检查这是否对错误消息有影响。 phpinfo() 和 ini_get('memory_limit') 有时会报告与现实不符的内容。您也可以尝试使用较低的值,例如 ini_set('memory_limit', '30M');,然后报告您的发现。
  • romainberger,总是不同的文件。从任一 wordpress(如 post.php)到来自不同模块的文件。 Quinn Strahl,到目前为止,我没有注意到任何模式,除非它只在我添加新帖子时发生(并非总是如此)。 J0HN,我会试试的

标签: php wordpress apache


【解决方案1】:

错误说内存限制是 18M 而不是 128M。这意味着某处 memory_limit 设置为不同于 128M(本地 php.ini 或应用程序本身,因为 PHP 可以在运行时覆盖此设置)。

我建议您首先创建一个名为(比如说)phpinfo.php 的文件,其内容如下:

<?php
phpinfo();
?>

并将其放置在您的脚本运行的位置。然后使用浏览器访问该文件并查找实际的 memory_limit 值。如果“全局”和“本地”值仍然显示 128M,那么可能在您的代码中的某处,有一个“ini_set("memory_limit", $value);"打电话或类似的东西。否则,如果显示 18M,请寻找其他可以设置的地方:

  • 检查您的 wp-config.php 文件
  • 检查任何本地 php.ini 文件(查看 phpinfo.php 页面以查看实际加载的 php.ini 文件的位置)
  • 检查任何包含此类指令的 .htaccess 文件

【讨论】:

  • 它显示 128mb 内存限制。我浏览了我的 wp 安装文件夹,以通过 ini_set 搜索内存限制更改。我发现没有一个可以真正改变它。
  • 您可以在导致错误的脚本中添加echo ini_get('memory_limit'); 吗? (越接近误差线越好)
  • 总是不同的文件和不同的行
  • 仍然,如果你把它放在任何一个在某个时候产生错误的文件中,它会说什么?
  • 这是共享主机还是专用服务器?您确定在错误发生时实际上有多少 MB 可用内存?虽然我确定你已经检查过了,但是看看wordpress.org/support/topic/…
【解决方案2】:

希望这会有所帮助,因为我遇到了同样的问题:

您遇到了 WordPress 自己的内存限制不是您的 PHP 内存限制。 Wordpress 为了prevent poorly written scripts from shutting down your whole PHP interpreter 实现了这个限制。不幸的是,正如您所注意到的,它相当简陋。

我发现解决此问题的最简单方法是从 Wordpress 插件存储库安装 Change Memory Limit 插件。它允许您在不手动修改任何 WP 文件的情况下解决问题。

该插件的 64M 默认值可能适合您。

或者,如果您不想信任第三方插件,请将以下行添加到wp-config.php

define('WP_MEMORY_LIMIT', '64M');

【讨论】:

  • 猜猜我会试一试,看看它是否有什么作用
  • 它没有帮助。分配的 18mb 内存仍然不足
  • defines 可以被像 APC 这样的操作码缓存扩展缓存。如果您实际上回显了 WP_MEMORY_LIMIT 的值以确保其值是您设置的值(例如,在您之前发布的 register_shutdown_function 中),这将有所帮助
  • 尝试从某个脚本中回显WP_MEMORY_LIMIT
【解决方案3】:

http://wordpress.org/support/topic/fatal-error-out-of-memory-messages?replies=24#post-1929111 得到它,我想我会与你们分享:

要在 WordPress 安装程序根目录中的 WP-CONFIG 文件中输入此内容: 之后输入:
define('ABSPATH', dirname(__FILE__).'/'); 以下:

define('WP_MEMORY_LIMIT', '64M');

还创建一个 PHP.INI,它应该被上传到 WP-CONTENT 中的插件文件夹:

 `memory_limit = 128M; //Maximum amount of memory a script may consume (64MB)
`

max_execution_time = 45;


upload_max_filesize = 15M;


post_max_size = 30M;

希望这会有所帮助!

【讨论】:

    【解决方案4】:

    只是一个帮助我调试这些错误的选项。

    如果你可以访问 .htaccess,你可以试试这个:

    php_value upload_max_filesize 128M
    php_value post_max_size 128M
    php_value max_execution_time 300
    php_value max_input_time 300
    

    如果这没有帮助,你可以试试这个来检查设置:

    echo 'Max upload size: ' . ini_get('upload_max_filesize') . '<br />';
    echo 'Max post size: ' . ini_get('post_max_size') . '<br />';
    echo 'Memory limit: ' . ini_get('memory_limit');
    

    我希望这有效,对我来说确实有效。

    【讨论】:

      【解决方案5】:

      我不确定这会导致错误,但值得检查。

      许多最无法追踪的可悲的内存不足错误是由以下原因引起的:

      1) 用户定义的异常处理程序,导致异常因此递归。

      2) 上述 + 试图获取引发异常的对象的类信息,并且类信息测试导致自动加载尝试,其中自动加载抛出另一个异常并因此递归。

      您是否做过与 WP 错误处理或自动加载冲突的事情?

      【讨论】:

        【解决方案6】:

        我在我所有的 Wordpress 网站上安装了 alexrabewp-memory-usage 插件。

        这个插件可以帮助您了解 Wordpress 在您的 PHP 内存使用方面所看到的情况。其他方法可能会向您显示服务器上的 PHP 设置,但是当您越接近浏览器中呈现的页面时,这些设置通常会被各种技术覆盖。

        设置你的最大内存 -> 打开你喜欢的文本编辑器并创建一个名为 php.ini 的文件;在文件中包含以下行:

        memory_limit = 256M

        将 php.ini 的副本放置在您的 Wordpress 根目录中。我还将副本放在:/wp-admin; /wp-内容;和 /wp-includes。

        【讨论】:

          【解决方案7】:

          在您的 wp-config.php 文件中添加 define('WP_MEMORY_LIMIT', '256M');。这是最简单的方法。

          【讨论】:

          • 对我来说似乎很愚蠢。如果它甚至不接近当前的,增加 memlimit 的意义何在?
          【解决方案8】:

          看起来在站点的某个地方,内存限制正在被覆盖,在代码中搜索 ini_set('memory_limit' 并查看返回的内容。

          【讨论】:

          • 已经做到了。我还按照 J0HN 的建议注册了关机功能。在内存不足错误的那一刻,它返回正确的内存限制
          【解决方案9】:

          鉴于您的 phpinfo() 脚本返回了正确的内存使用值,这显然是在 Wordpress 的某个地方设置的,因此会覆盖 Apache 提供的值,因此使用 .htaccess 来应用它仍然不起作用。
          此链接 (http://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP) 表明 Wordpress 默认进行自己的内存管理,因此在 wp-config.php 中设置 ('WP_MEMORY_LIMIT', '256M') 是合乎逻辑的。

          如果您对托管您网站的服务器有 shell 访问权限,我建议您转到 wordpress 安装的 DocumentRoot 并运行以下命令:

          grep -R "18M" *
          grep -R -e '(WP_MAX_MEMORY_LIMIT|WP_MEMORY_LIMIT)' *
          

          这将在您的文件中搜索字符串 18M(您的内存限制值似乎设置为人类可读术语)和 Wordpress 定义的内存限制的配置选项。我怀疑这些命令之一将返回正输出。然后您应该按照建议更改 WP_MEMORY_LIMIT(虽然 256M 可能有点高 - 最初尝试 64M,您不想给自己造成潜在问题)。

          【讨论】:

          • 第一个没有返回任何东西。我认为第二个错字
          • 抱歉,没有集中注意力:grep -R -e '(WP_MAX_MEMORY_LIMIT|WP_MEMORY_LIMIT)' * 应该删除语法问题 ;)
          • 也没有返回任何东西
          • 这似乎很不寻常,因为在 Wordpress 代码中它必须检查设置的值,即使不是。我强烈建议您更新 wp-config.php 以包含 WP_MEMORY_LIMIT 值。如果它解决了您的问题,我是对的,您可以将其保留。如果没有,请将其删除,不会造成任何伤害。我们知道这不是 Apache 做的。
          猜你喜欢
          • 2014-06-01
          • 2014-01-25
          • 2011-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多