Laravel Forge部署npm run dev报错Killed(exit 137)求助
解决Laravel Forge中npm run dev/prod报"Killed"(exit 137)的问题
核心原因分析
exit 137确实是系统因内存不足终止进程的标志,你添加--max-old-space-size无效,大概率是以下几种情况:
- 服务器可用物理内存确实不足,Node内存限制参数未生效或超出实际可用内存
- 升级Node/NPM后,Laravel Mix及相关依赖的内存需求大幅提升
- Forge部署环境的资源限制(CPU/内存配额)与手动SSH执行环境不一致
具体解决步骤
1. 确认服务器实际可用内存
SSH登录服务器,执行以下命令查看内存状态:
free -h
重点关注available列数值,若可用内存远低于你设置的8000MB(8GB),需将--max-old-space-size调整为与可用内存匹配的数值(比如可用2GB就设为1500,预留部分内存给系统)。
2. 确保NODE_OPTIONS参数生效
你当前的脚本写法在Forge的shell环境中可能存在解析问题,尝试以下两种写法:
- 写法一(规避引号转义问题):
"dev": "NODE_OPTIONS=--max-old-space-size=1500 mix" - 写法二(用cross-env兼容环境,先安装依赖):
先执行依赖安装:
再修改脚本:npm install cross-env --save-dev"dev": "cross-env NODE_OPTIONS=--max-old-space-size=1500 mix"
3. 优化Laravel Mix构建配置
升级Node后,webpack等插件可能默认启用了高内存特性,修改webpack.mix.js:
- 禁用不必要的Source Map:
// 开发环境用轻量Source Map mix.sourceMaps(true, 'eval-cheap-source-map'); // 生产环境直接关闭Source Map if (mix.inProduction()) { mix.sourceMaps(false); } - 拆分大代码块减少单进程内存占用:
mix.splitChunks();
4. 临时增加Swap分区缓解内存压力
若服务器物理内存不足,可在Forge部署脚本中临时创建Swap分区:
# 创建1GB Swap文件 sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 执行构建命令 npm run prod # 构建完成后删除Swap(可选) sudo swapoff /swapfile sudo rm /swapfile
5. 调整依赖版本
若升级依赖后内存暴增,可尝试:
- 回退
laravel-mix、webpack等核心包到之前能正常运行的版本 - 执行
npm dedupe清理重复依赖,减少内存占用
额外排查提示
- Forge密码修改与该问题无关,无需考虑
- 手动SSH执行时,务必进入与Forge部署相同的项目目录,避免环境变量差异
内容的提问来源于stack exchange,提问作者Brad Ahrens
相关产品推荐
相关产品推荐

