You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 7网站每次页面加载触发缓存清理导致性能骤降求助

解决Drupal 7中system_list_reset()频繁触发cache_clear_all()的性能问题

我来帮你梳理下这个问题的排查思路——毕竟Drupal 7里system_list_reset()每次页面加载都触发缓存清空,肯定会把性能拖垮到没法用。结合你说的情况,给你几个具体的排查方向:

  • 先排查真正的文件缺失(别信第三方模块的误报)
    第三方模块的误报确实坑人,你可以用Drush的官方命令来精准检测:

    • 运行 drush pm-list --missing:这个命令会直接列出所有状态为启用但实际文件缺失的模块/主题,比第三方工具靠谱多了。
    • 或者用 drush status,里面会有一行"Missing modules",能直接看到问题所在。
  • 检查模块/主题的.info文件
    有时候不是整个模块缺失,而是某个模块的.info文件里声明的文件实际不存在。比如有些模块会在.info里写files[] = custom_helper.inc,但这个文件被误删了,Drupal扫描时发现不匹配,就会触发system_list_reset()。你可以遍历所有启用的模块和主题,核对它们.info里的files项对应的文件是否存在。

  • 追踪system_list_reset()的调用源头
    你已经用xhprof看到它调用了cache_clear_all(),但可以再深挖一层:看看是谁触发了system_list_reset()?xhprof的调用栈应该能显示上层调用者——比如是不是某个自定义模块在hook_init()里瞎调用了这个函数,或者某个模块的逻辑有问题,每次页面加载都强制重置系统列表。

  • 核对数据库system表的记录
    有时候模块卸载不干净,或者system表的记录和实际文件系统不一致,也会导致这个问题。比如某个模块在system表中状态是启用,但实际文件已经被删除了。你可以运行SQL查询:

    SELECT name, filename FROM system WHERE status = 1;
    

    然后逐个核对filename对应的文件是否真的存在于服务器上。

  • 检查Opcode缓存的配置
    虽然你说禁用了Drupal的缓存,但服务器层面的Opcode缓存(比如OPcache、APC)如果配置有问题,也可能导致Drupal频繁重新扫描文件,间接触发system_list_reset()。你可以通过phpinfo()查看OPcache的配置,重点看opcache.revalidate_freq(是不是设成了0,导致每次都重新验证文件)、opcache.enable是否开启正常。

先从这几个方向入手,尤其是Drush的缺失模块检测和system表的核对,大概率能找到问题的根源。

内容的提问来源于stack exchange,提问作者l blestel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:42:31