在 Linux 上运行 Laravel 项目时,发现内存占用高是很常见的问题。通常不是“Laravel 本身吃内存”,而是由运行方式 + 组件使用 + 配置共同导致的。下面从原因到排查、优化,系统说明。
Laravel 一般运行在 PHP-FPM 下:
问题配置示例:
pm = dynamic
pm.max_children = 200
➡ 200 × 50MB ≈ 10GB 内存
✅ 查看:
ps aux | grep php-fpm
如果你用了:
php artisan queue:workphp artisan horizon这些进程 常驻内存,而且:
✅ 查看:
ps aux | grep artisan
以下命令一次性就会吃很多内存:
composer updatephp artisan config:cachephp artisan route:cachephp artisan migrate尤其是:
以下会显著增加内存:
APP_DEBUG=true生产环境必须关闭。
❌ 错误示例:
User::all(); // 几万条一次性加载
✅ 正确:
User::chunk(1000, function ($users) {
//
});
或:
User:: cursor();
以下未缓存会反复计算:
✅ 生产必须执行:
php artisan config:cache
php artisan route:cache
php artisan view:cache
没有 OPcache:
✅ 检查:
php -i | grep opcache
top -c
或
htop
php -i | grep memory_limit
memory_get_peak_usage(true);
pm = dynamic
pm.max_children = 20~50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
.env
APP_DEBUG=false
opcache.enable=1
opcache.memory_consumption=128
php artisan queue:work --timeout=60 --tries=3
或 Horizon 配置 timeout
Linux 上 Laravel 内存高,90% 是 PHP-FPM 进程数 + Queue 常驻 + 未缓存 + Eloquent 滥用。
如果你愿意,可以告诉我:
php-fpm.conf 配置我可以帮你精确算该开多少进程。