错误消息"Fatal error: Allowed memory size of XXXXX bytes exhausted"是 WordPress 网站所有者最常遇到的问题之一。这意味着 PHP 尝试使用的内存超过了服务器为单个进程允许的量。本指南涵盖诊断实际内存限制、正确提升限制并验证修复的所有方法——无论您使用的是带 DirectAdmin 的共享主机还是更受限制的环境。
什么是 PHP 内存限制以及为何重要?
PHP 内存限制(memory_limit)是单个 PHP 进程每次请求可消耗的最大内存量。当 WordPress 加载页面、运行定时任务、处理媒体上传或执行复杂数据库查询时,PHP 会为该任务分配内存。如果任何插件或主题需要超过配置限制的内存,PHP 会立即终止执行并抛出致命错误。
大多数 PHP 安装中 memory_limit 的默认值为 128M。对于只有几个插件的轻量级网站来说已经足够。然而,配备了页面构建器、WooCommerce、缓存插件、安全扫描器和 SEO 插件的完整 WordPress 网站,在单次页面加载期间(尤其是涉及管理后台时)很容易超过 128M。
在进行任何更改之前,了解服务器级别限制(在主 php.ini 中设置)、用户级别覆盖(在 .htaccess 或本地 php.ini 中设置)和 WordPress 级别常量(在 wp-config.php 中设置)之间的区别至关重要。PHP 始终应用各层允许值中的最低值。
如何检查当前的内存限制
在修改任何配置文件之前,先确认 PHP 实际执行的限制值。有几种可靠的方法:
方法 1——WordPress 站点健康
在 WordPress 管理后台前往工具 > 站点健康 > 信息 > 服务器。面板显示「PHP 内存限制」(服务器的限制)和「WordPress 内存限制」(WordPress 请求的值)。如果这两个值不同,说明 WordPress 请求的内存超过了服务器允许的量。
方法 2——临时 phpinfo() 文件
在 WordPress 根目录创建名为 info.php 的文件并添加:
<?php phpinfo(); ?>
在浏览器中访问 https://yourdomain.com/info.php 并搜索 memory_limit。您将看到「本地」值(当前有效)和「主」值(服务器默认值)。检查后立即删除该文件——将 phpinfo() 公开访问是安全风险。
方法 3——DirectAdmin PHP 配置
登录 DirectAdmin 并前往进阶功能 > PHP 配置。当前 memory_limit 会显示出来,通常可以直接从此面板更改,无需编辑任何文件。
方法 4——WP-CLI
如果您有服务器的 SSH 访问权限,WP-CLI 能给出最快的答案:
wp --info
输出包含「PHP 二进制内存限制」,反映真实的服务器端值。
提升 PHP 内存限制的三种方法
有三个地方可以设置内存限制,每个都在堆栈的不同层级。为获得最可靠的结果,应使用您可以访问的最高层级。
方法 1——wp-config.php(推荐首选)
在 WordPress 安装根目录打开 wp-config.php,在注释 /* That's all, stop editing! */ 之前添加这两行:
define( 'WP_MEMORY_LIMIT', '256M' ); define( 'WP_MAX_MEMORY_LIMIT', '512M' );
WP_MEMORY_LIMIT 适用于常规前端请求。WP_MAX_MEMORY_LIMIT 适用于 wp-admin 后台和需要更多资源的后台进程。此方法快捷,无需服务器访问权限,但只有在服务器自身的限制已达到或超过您指定值时才有效。
方法 2——.htaccess
在以 mod_php 方式运行 PHP 的 Apache 服务器上,可以通过在根目录 .htaccess 添加此行来覆盖目录级别的内存限制:
php_value memory_limit 256M
此更改会影响该目录及其子目录中的所有 PHP 文件。但是,如果您的主机使用 PHP-FPM(大多数现代 DirectAdmin 设置都如此),此指令将被忽略。PHP-FPM 不从 .htaccess 文件读取 php_value。
方法 3——php.ini
在网站的 public_html 文件夹中创建名为 php.ini 的文件,内容如下:
memory_limit = 256M
对于 PHP-FPM 环境,当无法编辑全局 php.ini 时,这通常是正确的方法。在 AsiaGB 的 DirectAdmin 主机上,您也可以通过文件管理器上传自定义 php.ini,系统会自动识别。
适用于典型 WordPress 网站的更完整推荐值集合:
memory_limit = 256M max_execution_time = 300 upload_max_filesize = 64M post_max_size = 64M max_input_vars = 3000
按网站类型推荐的内存限制
合适的值取决于网站的复杂程度。下表提供了起始参考值:
| 网站类型 | WP_MEMORY_LIMIT | WP_MAX_MEMORY_LIMIT | 备注 |
|---|---|---|---|
| 简单博客/宣传册网站 | 128M | 256M | 少于 10 个插件 |
| 标准商业网站 | 256M | 512M | 10–30 个插件,含 SEO 插件 |
| WooCommerce + 页面构建器 | 512M | 512M | Elementor、Divi、大量商品 |
| 大型 WooCommerce / 会员网站 | 512M–1G | 1G | 1,000+ 商品,订阅功能 |
请记住:wp-config.php 中的值是请求,而非保证。PHP 会默默地将内存限制在服务器配置的最大值。如果您在 wp-config.php 中设置了 256M,但服务器只允许 128M,PHP 将使用 128M。
通过 AsiaGB 主机的 DirectAdmin 提升内存限制
如果您的网站托管在 AsiaGB 的 DirectAdmin 主机上,可以在不直接编辑任何文件的情况下提升内存限制:
- 登录 DirectAdmin,访问
yourdomain.com:2222 - 点击进阶功能 > PHP 配置
- 找到
memory_limit并输入您希望的值,例如256M - 点击保存——更改立即生效,无需重启 Apache
如果看不到 PHP 配置菜单,您的账户可能使用默认服务器设置。在这种情况下,通过文件管理器在 public_html 中放置自定义 php.ini 文件:
memory_limit = 256M max_execution_time = 300 upload_max_filesize = 64M post_max_size = 64M
保存后,清除任何 PHP opcode 缓存(如已启用),并刷新 WordPress 中的站点健康页面以验证新限制已生效。
验证新内存限制已生效
进行更改后,在关闭终端或文件管理器之前,始终确认新限制已实际生效。
通过快速 PHP 脚本验证
创建一个临时文件并在运行时检查该值:
<?php echo ini_get('memory_limit'); ?>
如果输出 256M,说明更改已生效。确认后删除该文件。
通过 WordPress 站点健康验证
前往工具 > 站点健康 > 信息 > 服务器,查看「PHP 内存限制」行,应该显示您更新后的值。
通过 WP-CLI 验证
wp eval 'echo ini_get("memory_limit");'
修复无效的常见原因
如果您已按照上述所有步骤操作但错误仍然存在,通常是以下情况之一导致的:
- 服务器限制低于您请求的值。PHP 始终应用两者中的较低值。如果您的方案允许更高分配,请联系主机提供商提升服务器级别限制。
- PHP-FPM 的 php.ini 位置错误。并非所有主机的 PHP-FPM 都会读取放置在
public_html中的php.ini文件。通过检查 phpinfo() 输出来确认 PHP 实际读取的 php.ini 路径。 - PHP-FPM 忽略了 php_value。.htaccess 中的
php_value指令仅适用于 mod_php,不适用于 PHP-FPM。改用本地 php.ini 或 DirectAdmin 设置。 - 插件内存泄漏。某些编码不良的插件会分配内存但不释放。即使将限制提升到 1G,如果插件存在泄漏,错误也可能无法防止。逐一停用插件以找出罪魁祸首。
- 过期的 opcode 或对象缓存。如果您的服务器使用 OPcache 或 Redis 等对象缓存,旧配置可能已被缓存。进行更改后请清除所有缓存。
专业提示:如果您已将限制提升到 512M 仍然看到内存错误,不要简单地再次提升。相反,停用所有插件,然后逐一重新激活,同时使用 Query Monitor 等插件监控内存使用情况。导致每次页面加载内存使用量激增超过 20–30M 的插件是更换的候选对象。这种二分法在数分钟内即可识别内存泄漏,远比追逐不断增加的限制有效得多。
内存限制与 WordPress SEO 性能
内存错误对 SEO 有直接的负面影响。当页面抛出致命内存错误时,HTTP 响应要么是 500 内部服务器错误,要么是空白页面——Googlebot 都会将其记录为爬取失败。重复失败向 Google 发出信号,表明该页面不可靠,可能导致爬取频率降低,最终使受影响的 URL 被取消索引。
核心网页指标——特别是最大内容绘制(LCP)和首字节时间(TTFB)——即使在发生致命错误之前,也会受到内存压力的影响。当 PHP 频繁接近内存上限时,它会花时间进行垃圾回收和内存重新分配,而不是渲染内容。这增加了延迟,损害了真实用户体验和 Lighthouse 分数。
在 Google Search Console 中出现错误之前主动解决内存问题,可保持爬取预算健康,排名稳定。
常见问题解答
WordPress 推荐的 PHP 内存限制是多少?
WordPress 官方建议一般网站至少设置 256M。如果运行 WooCommerce、Elementor Pro 或其他资源密集型插件,则设置为 512M。拥有数千个产品的大型商店或会员制网站可能需要 512M 至 1G。避免不必要地设置过高,因为这会浪费服务器内存。
我修改了 wp-config.php 但仍然收到内存超限错误,为什么?
WordPress 无法分配超过服务器 PHP 限制的内存。如果服务器的 php.ini 将内存上限设为 128M,即使您在 wp-config.php 中定义了 256M,WordPress 也无法超过该值。请通过 phpinfo() 或 DirectAdmin 检查实际限制,然后通过 .htaccess、用户 php.ini 提升服务器级别限制,或联系主机提供商。
WP_MEMORY_LIMIT 和 WP_MAX_MEMORY_LIMIT 有什么区别?
WP_MEMORY_LIMIT 控制前端可用内存(默认 40M)。WP_MAX_MEMORY_LIMIT 设置 wp-admin 后台和后台任务的上限(默认 256M)。将 WP_MEMORY_LIMIT 设置为至少 256M,将 WP_MAX_MEMORY_LIMIT 设置为至少 512M,以确保媒体上传和插件更新等管理操作顺畅运行。
WordPress 内存超限会损害我的 SEO 吗?
是的。内存错误会导致页面显示致命错误或空白死亡白屏。当 Googlebot 爬取这些损坏的页面时,它会记录服务器错误,从而降低核心网页指标分数。如果重要页面长时间损坏,它们可能会被取消索引。一旦出现内存错误,请立即修复。