现象
后台点击更新主页 html 后要等待 1.5 分钟才有结果, 对于我这个全新安装没有任何数据的站点这个时间确实无法接受
开始排查
这个 case 中我这个环境是 php5.4+apache, 使用的是 PHP-fpm, 如果使用的是 CGI 方式, 后面步骤就根据 CGI 进程去追踪.
因为不了解代码和其中逻辑没法直接排查代码, 所以使用了进程追踪工具 strace, 这个有兴趣可以找找文档深入了解一下, 建议找个测试环境来调试, 避免过多访问不太好区分.
如果 fpm 进程较多可以将 strace 信息记录到文件慢慢分析 ps -ef|grep PHP-fpm|awk '{print" -p "$2" -s 10000 -o /tmp/strace_"$2".log"}'|xargs strace , 我这里是测试环境且为了方便追踪进程调整了 fpm 进程最小和最大都为 1, 以下是我调整的 fpm 参数:
- pm.start_servers = 1
- pm.min_spare_servers = 1
- pm.max_spare_servers = 1
开始追踪, 页面点击一下 "更新主页 HTML" 按钮, 主机内执行
ps -ef|grep PHP-fpm|awk '{print" -p "$2" -s 10000"}'|xargs strace
得到信息如下且可以看到如下这个 IP 被多次循环多次请求了
打算代码目录中全局搜索 203.156.197.15 这个 IP, 但遗憾的是并没有找到这个 IP
根据经验, 那么有可能这个 IP 是被写入到数据库或是代码中用域名填写了, 于是将数据库导出为 sql 同样用 grep 查找, 还是未能找到; 于是想到在主机内抓包, 如果填写的是域名, 那么会向 dns 发起解析请求, 抓包命令我使用的是 tcpdump -i any udp
可以看到排除一些阿里云官方的地址和 ptr 解析, 得到的只有 ssp.desdev.cn 这个域名了, 再次搜索这个域名, 终于找到了
include/helpers/mda.helper.PHP
中是有这段代码的, 看起来是织梦官方的一个 API 地址, 测试访问该地址的 80 端口确实无法访问了. 尝试将其通过 hosts 指向到 127.0.0.1 后网站操作恢复正常
来源: https://yq.aliyun.com/articles/702180