具体表现
打开插件列表要等半分钟,其他后台页面正常,浏览器网络面板里 admin-ajax 一直处于等待。
先判断哪一层出错
某个插件在后台每个请求都发起远程校验或全表查询,把响应时间拖长。判断时先分清是 WordPress admin-ajax 慢 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。
操作步骤
- 先看慢请求的 action 参数对应哪个插件
- 停用后对比耗时
- 必要时禁用其远程检查
对应的命令或配置片段如下,可直接复制:
add_action('wp_ajax_my_action', 'my_handler');
# 排查
# 后台 -> 工具 -> 站点健康 -> 查看慢查询
# 或在 wp-config.php
# define('SAVEQUERIES', true);
测试环境复现不了时,先对比两边的版本号和配置文件,差异往往就在被忽略的那几行里。如果同一现象隔一段时间又出现,多半是某个定时任务或重启流程把配置覆盖回去了,顺手查一遍启动脚本。
收尾检查
插件页加载恢复到两秒内,慢请求消失。