温馨提示×

linux laravel为何内存高

小樊
43
2026-10-12 23:45:44
栏目: 智能运维

在 Linux 上运行 Laravel 项目时,发现内存占用高是很常见的问题。通常不是“Laravel 本身吃内存”,而是由运行方式 + 组件使用 + 配置共同导致的。下面从原因到排查、优化,系统说明。


一、最常见原因(按发生频率)

1️⃣ PHP-FPM 进程数过多(最常见)

Laravel 一般运行在 PHP-FPM 下:

  • 每个请求 = 一个 PHP 进程
  • 每个进程常驻内存(20–80MB 不等)

问题配置示例:

pm = dynamic
pm.max_children = 200

➡ 200 × 50MB ≈ 10GB 内存

✅ 查看:

ps aux | grep php-fpm

2️⃣ 使用了 Queue / Horizon(后台常驻)

如果你用了:

  • php artisan queue:work
  • php artisan horizon

这些进程 常驻内存,而且:

  • 不重启
  • 内存只增不减(内存泄漏)

✅ 查看:

ps aux | grep artisan

3️⃣ Composer / Artisan 命令执行时

以下命令一次性就会吃很多内存:

  • composer update
  • php artisan config:cache
  • php artisan route:cache
  • php artisan migrate

尤其是:

  • 项目大
  • 依赖多
  • 服务器内存小

4️⃣ Debug / 开发模式开启

以下会显著增加内存:

  • APP_DEBUG=true
  • Laravel Telescope
  • Laravel Debugbar
  • Clockwork

生产环境必须关闭。


5️⃣ Eloquent 使用不当(内存杀手)

❌ 错误示例:

User::all(); // 几万条一次性加载

✅ 正确:

User::chunk(1000, function ($users) {
    //
});

或:

User:: cursor();

6️⃣ 缓存未使用

以下未缓存会反复计算:

  • 配置
  • 路由
  • 权限
  • 菜单
  • 配置表数据

✅ 生产必须执行:

php artisan config:cache
php artisan route:cache
php artisan view:cache

7️⃣ OPCache 未开启

没有 OPcache:

  • 每次请求重新编译 PHP
  • 内存 & CPU 都高

✅ 检查:

php -i | grep opcache

8️⃣ 日志 / 异常无限增长

  • 异常被吞
  • 日志疯狂写
  • 内存 + 磁盘双高

二、快速排查内存高的方法

✅ 1. 看是谁吃内存

top -c

或

htop

✅ 2. 看 PHP 内存限制

php -i | grep memory_limit

✅ 3. 看 Laravel 实际峰值

memory_get_peak_usage(true);

三、Linux + Laravel 内存优化清单 ✅

PHP-FPM 优化

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

opcache.enable=1
opcache.memory_consumption=128

Queue 必须限速 + 重启

php artisan queue:work --timeout=60 --tries=3

或 Horizon 配置 timeout


四、一句话总结

Linux 上 Laravel 内存高,90% 是 PHP-FPM 进程数 + Queue 常驻 + 未缓存 + Eloquent 滥用。

如果你愿意,可以告诉我:

  • 内存占用多少?
  • 是否用 Queue / Horizon?
  • 服务器配置(CPU / 内存)
  • php-fpm.conf 配置

我可以帮你精确算该开多少进程。

0 踩