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. 先确认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
相关产品推荐
相关产品推荐

