Magento 2站点响应时间过长(2-4s),求解决Custom类加载慢问题
我们的Magento 2站点服务器响应时间长达2-4秒,硬件资源未满载,通过New Relic排查发现Custom/Magento\Framework\App\Bootstrap::run、Custom/Magento\Framework\App\Http\Interceptor::launch、Custom/Magento\Framework\App\Http::launch这几个方法耗时过高,以下是针对性的排查解决思路:
排查自定义代码/扩展的影响
核心启动方法耗时高,大概率是自定义扩展或修改过的核心代码拖慢了启动流程。先禁用所有第三方扩展、恢复核心文件至官方原版,测试响应时间。如果速度恢复,再逐个启用扩展定位问题。重点检查是否有扩展在bootstrap、launch阶段加入了大量数据库查询、远程API调用、文件IO等耗时操作。优化初始化流程
Magento启动阶段会加载大量配置与依赖,可从这几点入手:- 清理无效
di.xml配置,执行bin/magento setup:di:compile重新编译DI,同时删除var/di、var/generation缓存目录; - 检查自定义模块的配置加载逻辑,避免在
config.xml中使用动态配置回调导致每次启动重复执行耗时操作。
- 清理无效
数据库查询优化
利用New Relic的数据库监控功能,查看启动过程中的慢查询:- 排查全表扫描查询,给对应字段添加索引;
- 清理重复查询逻辑,对重复读取的配置数据用缓存优化。
缓存层优化
确保Magento配置缓存、块缓存、集合缓存全部启用,且缓存后端(如Redis、Memcached)配置正确。若使用文件缓存,建议替换为Redis以提升配置与DI加载速度。执行bin/magento cache:flush清理所有缓存后测试。PHP配置优化
- 调整
memory_limit、开启opcache.enable并配置合理缓存大小,避免每次请求重新编译PHP文件; - 升级PHP至Magento官方推荐的稳定版本(如PHP 8.1+),新版本PHP性能提升显著。
- 调整
排查文件系统性能
若硬件CPU、内存未满载,需检查磁盘IO瓶颈:用dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct测试磁盘读写速度,若速度偏低,可更换SSD或优化文件系统挂载参数。
内容的提问来源于stack exchange,提问作者Azzez

