搜索全站
报错排查 7 分钟阅读

WordPress 提示 Allowed memory size exhausted 内存溢出解决

网站报 Fatal error: Allowed memory size of xxx bytes exhausted?本文教你用 wp-config、php.ini、.htaccess 三种方式提高 WordPress 内存上限,并揪出真正吃内存的元凶。

U
UFO_PF 2026-10-10 · 阅读 7 分钟
Wo 报错排查
阅读提示
本文约 2,533 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。

引言

你在更新插件、导入文章、上传图片或者打开某个后台页面时,突然页面中断,蹦出一长串英文:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)。这句话读起来费劲,但意思很简单:PHP 允许这个脚本使用的内存用光了。注意括号里的 tried to allocate 20480 bytes——它不是说你要 128MB 那么大的内存,而是脚本在最后那一下还想申请 20KB,可是配额已经见底,于是整段程序被强行叫停。这种情况最爱发生在数据量大的站点、装了重型插件的站点,或者主机给了很小内存配额的廉价空间上。它有时表现为整页报错,有时干脆白屏。别慌,这通常不是服务器坏了,而是内存上限设置得太保守。这篇教你一步步把内存提上去,把元凶找出来。

故障原因分析

  1. 站点内存配额偏低。很多廉价虚拟主机默认 memory_limit 只有 64M 甚至 32M,跑一个带缓存、安全、SEO 插件的 WordPress 就显得捉襟见肘,稍一操作就见底。
  1. 插件或主题太吃内存。页面构建器、大数据导入、多语言、备份类插件在单次请求里要处理海量数据,很容易把内存撑爆。
  1. 数据库记录过多。文章、评论、选项数据累积到几万几十万条时,某些查询会把整批结果读进内存,配置再高也可能被耗尽。
  1. 无限循环或递归。代码里存在死循环、递归调用没设终止条件,内存会一路涨到上限,这种报错的数值往往特别大。
  1. 恶意请求或爬虫。攻击者用爬虫疯狂抓取动态页面、或用参数触发重查询,会短时间大量占用内存导致溢出。

分步解决方案

方法一:修改 wp-config.php(推荐首选)

WordPress 在 wp-config.php 里预留了内存上限的定义,这里设置优先级最高、也不受主机面板限制,先从这里下手。打开网站根目录的 wp-config.php,找到 / That's all, stop editing! / 上方,加入:

// wp-config.php
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

WP_MEMORY_LIMIT 决定前台日常运行的上限,WP_MAX_MEMORY_LIMIT 决定后台管理操作(比如导入、更新)的上限。改完保存,重新执行刚才失败的操作看看。

方法二:修改 php.ini

如果你的服务器有独立 php.ini(宝塔、cPanel、独立服务器常见),直接调大全局上限:

; php.ini
memory_limit = 256M

宝塔面板用户更简单:进入「软件商店 → PHP → 设置 → 配置修改」,找到 memory_limit 一栏改成 256M 保存即可,无需手动改文件。

方法三:通过 .htaccess 设置(Apache 环境)

用 Apache 且没有 php.ini 修改权限时,可以在根目录 .htaccess 里加:

# .htaccess
<IfModule mod_php.c>
php_value memory_limit 256M
</IfModule>

注意:只有 PHP 以 Apache 模块方式运行时才有效。如果 php_value 导致整站 500,说明你的环境跑的是 PHP-FPM,请删掉改用方法一或方法二。

方法四:提升主机面板里的限制

cPanel 可以在「MultiPHP INI Editor」里为站点单独设置 memory_limit。有些虚拟主机默认把这项锁死,此时只能联系客服申请提高配额,或者考虑换主机。

方法五:找出真正吃内存的元凶

内存提上去只是缓解,找到根源才算根治。把 wp-content/plugins 改名停用全部插件,测同一操作是否还报错:

wp-content/plugins  →  wp-content/plugins_bak

不报错就把插件逐个启用,锁定那个吃内存的。如果换主题后正常,说明主题也要背锅。再配合调试日志看是哪一步炸的:

// wp-config.php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

日志写在 wp-content/debug.log,报错行会指出具体文件路径。

常见踩坑点

  1. 只提 WP_MEMORY_LIMIT 不提 WP_MAX_MEMORY_LIMIT。后台导入、更新这类重活走的是后者,只改前者会发现前台好了、后台照样溢出。
  1. 把值写成 256 漏了单位。必须写成 256M,写成纯数字会被当成字节数,结果反而更小。
  1. 盲目提到 1024M。有些主机根本不允许,设了也无效,还可能被安全策略拦截,建议从 256M 逐步试。
  1. 在 PHP-FPM 环境下用 .htaccess 的 php_value。这种写法会直接导致 500,务必先确认运行模式。
  1. 提完内存就不管原因。把上限从 64M 提到 1024M 掩盖了一个死循环插件,早晚还会以别的方式爆掉。

总结

Allowed memory size exhausted 的核心含义就是当前脚本撞到了 PHP 内存上限。修复分两步走:先把服务器允许的上限调大,优先改 wp-config.php 里的 WP_MEMORY_LIMIT 和 WP_MAX_MEMORY_LIMIT,再视环境配合 php.ini、宝塔面板或 .htaccess;然后用停插件、换主题的方式找出真正大量占用资源的那个组件,从根上解决。记住括号里 tried to allocate 的数值一般都是几百字节到几十 KB,那是「压垮骆驼的最后一根稻草」,不是真正需要的总量。吐过这个 WordPress 内存溢出报错,你的站点对资源的感觉会清晰很多,配置也就更有针对性。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。