You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:23:24