Laravel 9内存占用过高求助:无查询页面仍占25MB内存
Laravel 9 + PHP 8 无查询页面内存占用过高(25MB)排查建议
问题背景
使用Laravel 9和PHP 8,某无数据库查询的页面内存占用达25MB,有查询的页面仅增加到26MB,无数据场景下该内存占用明显过高。已通过Debugbar监控内存占用和查询情况,但无法定位问题根源。
已尝试的解决方案
- 在
AppServiceProvider中添加Model::preventLazyLoading(!app()->isProduction());,已消除所有N+1查询问题 - 压缩图片尺寸,但无图片页面仍存在相同问题
- 使用分页展示数据
- 仅调用所需数据
- 查阅过相关解决方案及YouTube教程,均未解决问题
排查方向建议
- 检查服务提供者启动逻辑:排查所有服务提供者(含自定义)的
register和boot方法,是否在启动时加载大量配置、实例化不必要对象,或执行了占内存的操作——这些逻辑会在所有请求中生效,包括无查询页面。 - 分析Composer依赖:用
composer show查看已安装依赖,排查是否有冗余或内存占用高的第三方包。可临时移除非核心依赖,观察内存变化。 - 断点监控内存增长:在
public/index.php的关键节点插入内存监控代码,逐步排查从请求入口到页面渲染的内存变化,定位内存突增的环节:// 示例:在关键节点插入内存监控 echo '入口内存: ' . memory_get_usage() . PHP_EOL; require __DIR__.'/../vendor/autoload.php'; echo '加载autoload后内存: ' . memory_get_usage() . PHP_EOL; $app = require_once __DIR__.'/../bootstrap/app.php'; echo '实例化App后内存: ' . memory_get_usage() . PHP_EOL; - 排查模板渲染逻辑:检查页面的Blade模板,是否引用大量全局组件、变量,或加载过多视图碎片——某些模板逻辑可能隐式加载大量数据或实例化对象。
- 确认PHP环境配置:检查
php.ini中opcache是否启用,未启用opcache会导致每次请求重新编译PHP文件,大幅增加内存占用;同时确认memory_limit设置是否合理。 - 使用专业内存分析工具:借助
php-meminfo或Xdebug生成内存快照,精准定位占用内存的具体对象、类或代码块,这是最有效的根因排查方式。
内容的提问来源于stack exchange,提问作者Nani Po
相关产品推荐
相关产品推荐

