Laravel项目部署Apache2后出现内存耗尽错误,求排查解决方法
Laravel部署Apache后内存耗尽问题排查与解决
排查方向
- 核对PHP配置文件的内存限制:Apache使用的PHP配置文件通常和Laravel内置服务器(artisan serve)的CLI配置文件不是同一个,先确认web环境下的
memory_limit设置。 - 查看Laravel应用日志:检查
storage/logs目录下的日志文件,定位是否存在无限循环、大量数据未分页加载、递归调用未终止等导致内存泄漏的代码逻辑。 - 分析Apache访问日志:确认是否有爬虫高频请求、特定路由重复触发等情况,导致内存占用累积。
- 检查Composer自动加载状态:部署后是否未执行优化命令,导致自动加载机制占用额外内存。
解决步骤
调整PHP内存限制
- 在项目根目录创建
phpinfo.php,内容为:<?php phpinfo(); ?> - 访问该文件,找到
Loaded Configuration File项,获取Apache对应的PHP配置文件路径 - 打开配置文件,修改
memory_limit = 256M(或根据需求调整为512M) - 重启Apache服务,使配置生效
- 在项目根目录创建
优化应用代码
- 数据库查询避免一次性加载全量数据,改用
->paginate()或->chunk()处理大量数据 - 检查递归函数是否存在未正确终止的情况,及时修复逻辑漏洞
- 对不再使用的大变量执行
unset()释放内存
- 数据库查询避免一次性加载全量数据,改用
优化Composer自动加载
在项目根目录执行命令:composer dump-autoload --optimize,生成优化后的自动加载文件,降低内存占用启用OPcache
在PHP配置文件中添加或修改以下配置:opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_accelerated_files = 10000重启Apache后,OPcache会缓存编译后的PHP代码,减少重复编译带来的内存消耗
调整Apache进程配置
若存在Apache进程内存泄漏,可修改MPM配置(如prefork模式下的MaxRequestPerChild),设置进程处理一定数量请求后自动重启,避免内存持续累积
内容的提问来源于stack exchange,提问作者Міша Корнійчук
相关产品推荐
相关产品推荐

