10

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

4

9 回答 9

6

错误说内存限制是 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 文件
于 2013-04-14T12:08:06.067 回答
2
于 2013-04-22T10:06:46.987 回答
2

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

您遇到了WordPress 自身内存限制的限制而不是您的 PHP 内存限制。Wordpress 实现了这个限制,以防止编写不佳的脚本关闭整个 PHP 解释器。不幸的是,正如您所注意到的,它相当简单。

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

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

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

define('WP_MEMORY_LIMIT', '64M');
于 2013-04-22T10:05:29.800 回答
1

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

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

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

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

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

于 2013-04-17T12:15:18.940 回答
1

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

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

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

memory_limit = 256M

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

于 2013-04-18T13:59:40.643 回答
1

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

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

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

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

于 2013-04-22T09:59:30.833 回答
1

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

于 2013-04-21T03:12:54.690 回答
1

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

如果您有权访问 .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');

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

于 2013-04-16T14:49:08.640 回答
1

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

于 2013-04-20T13:26:36.990 回答