MediaWiki特定命名空间访问内存耗尽问题排查求助
MediaWiki 1.43.0 特定命名空间内存耗尽故障排查思路
1. 临时调高PHP内存限制验证
在LocalSettings.php开头添加:
ini_set('memory_limit', '512M');
重启httpd后访问故障命名空间:
- 若能正常访问,说明是该命名空间下的内容触发了高内存消耗,而非递归死循环;
- 若仍报错内存耗尽,大概率存在递归调用或无限循环逻辑。
2. 定位故障页面/内容
- 先在故障命名空间下新建空白测试页面,访问测试:
- 测试页面正常:说明现有页面的内容/模板存在问题,比如模板嵌套层级过深、循环调用大量数据(如遍历分类下所有页面);
- 测试页面也报错:问题出在命名空间的全局配置或底层逻辑。
- 针对报错的具体页面,尝试进入编辑模式,逐步删除内容/模板片段,定位触发故障的代码块。
3. 排查递归/循环调用
- 启用PHP错误追踪,在
LocalSettings.php开头添加:
访问故障页面后查看错误日志,寻找重复调用的函数栈信息,定位递归循环点。ini_set('display_errors', 1); ini_set('error_reporting', E_ALL); ini_set('log_errors', 1); ini_set('error_log', '/tmp/php-mediawiki-error.log'); - 启用MediaWiki数据库查询日志,在
LocalSettings.php添加:
查看日志中是否有重复执行的查询,这类查询可能导致内存堆积。$wgDebugLogGroups['rdbms'] = '/tmp/rdbms-debug.log';
4. 清理MediaWiki缓存与更新
- 运行维护脚本更新系统:
php maintenance/update.php - 清理页面缓存,针对特定命名空间(替换
10为目标命名空间ID,如Template是10、Category是14):php maintenance/purge.php --namespace=10 - 删除文件缓存:直接删除MediaWiki目录下
cache文件夹内的所有文件;若使用Redis/Memcached作为缓存,重启服务或清空缓存。
5. 验证PHP版本兼容性
MediaWiki 1.43.0要求PHP 7.4及以上版本,执行命令确认当前PHP版本:
php -v
若MacOS升级后PHP版本变更(如切换到系统自带的低版本),需切换回符合要求的PHP版本。
6. 排查命名空间关联配置
- 检查
LocalSettings.php中是否残留自定义命名空间的关联配置,比如$wgNamespaceProtection、$wgContentNamespaces的设置,或针对这些命名空间的钩子函数(如BeforePageDisplay、ParserFirstCallInit); - 确认是否有第三方扩展(即使已禁用)留下的配置残留,可尝试备份
LocalSettings.php后,用官方默认配置文件替换,仅保留必要的数据库连接和命名空间配置,测试是否恢复正常。
7. 检查数据库数据异常
- 查询故障命名空间下的页面修订情况(替换
10,14为目标命名空间ID):
排查是否有修订版本异常过多的页面,这类页面加载时会消耗大量内存。SELECT page_title, COUNT(rev_id) AS rev_count FROM page JOIN revision ON page.page_latest = revision.rev_id WHERE page_namespace IN (10,14) GROUP BY page_title ORDER BY rev_count DESC; - 查询模板循环依赖:
检查是否存在模板互相调用的循环(如模板A调用模板B,模板B又调用模板A)。SELECT tl_title, tl_namespace, tl_from_title FROM templatelinks WHERE tl_namespace=10;
内容的提问来源于stack exchange,提问作者Jan Steinman
相关产品推荐
相关产品推荐

