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

DigitalOcean Ubuntu主机Express/Nodemon请求触发崩溃 exit code 137

问题定位

exit code 137 是Linux系统内置的OOM Killer(内存不足回收机制)强制终止进程的专属错误码,和代码语法错误无关,你的服务是内存占满后被系统直接杀掉了,和日志里打印的Killed信息完全对应。

匹配特征验证
  • 你的服务器总内存只有2GB,同时跑Next.js、Express、MySQL三个服务本身内存基线就偏高:Node运行时、Next.js SSR渲染、MySQL缓存都会占用固定内存,剩余可用内存本身就不多
  • 故障触发逻辑完全吻合:服务刚启动时没有实际请求处理,内存维持在低占用水平,一旦收到fetch请求,Node执行业务逻辑、MySQL响应查询都会瞬间申请内存,直接打满剩余可用内存触发系统强杀
  • 服务器监控截图显示请求发起时内存占用直接冲到阈值:
    服务器监控截图1
    服务器监控截图2
    服务器监控截图3
    服务器监控截图4
排查&修复方案

1. 先确认OOM实锤

执行以下命令拉取系统内核日志,能看到明确的进程被杀记录:

dmesg -T | grep -i "oom-killer"

如果输出里包含Out of memory: Killed process xxx (node)相关内容,就可以100%确认是内存不足导致的故障。

2. 临时修复(立刻恢复服务可用)

  • 限制Node进程最大堆内存,避免Node无节制抢占内存:修改服务启动命令,把原来的yarn start替换为NODE_OPTIONS="--max-old-space-size=1024" yarn start,给Node分配1G内存上限,剩余1G留给系统、MySQL和其他进程
  • 调低MySQL内存占用:修改MySQL配置文件my.cnf,把innodb_buffer_pool_size参数设置为256M,key_buffer_size设置为64M,不要用默认的高内存配置,适配2G内存的小规格服务器
  • Next.js构建阶段也加上内存限制,避免构建时就占满内存:执行构建时用NODE_OPTIONS="--max-old-space-size=1024" yarn build命令

3. 长期优化

  • 排查代码内存问题:检查是否存在全局变量无限存储请求数据、SQL查询无分页拉取全表超大结果集、SSR阶段重复加载大体积依赖未做缓存这类内存泄漏/无效占用问题
  • 配置2G大小的swap分区作为内存兜底,避免突发流量时进程直接被系统杀掉,注意swap性能远低于物理内存,仅做应急兜底使用
  • 如果站点访问量不低,直接将服务器内存升级到4G是成本最低、见效最快的方案

内容的提问来源于stack exchange,提问作者Firas SCMP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:27:24