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

Bitbucket流水线构建React应用内存不足:terser-webpack-plugin启动jest线程问题

构建React应用时terser-webpack-plugin启动jest-worker导致内存超限的问题解决

问题背景

我们团队使用Bitbucket Pipelines构建部署React应用,当前yarn build步骤因内存超限失败。查看内存使用日志发现,失败前terser-webpack-plugin启动了大量占用内存的jest-worker线程。需要说明的是:失败发生在构建步骤而非测试步骤,我们并未运行测试,且测试步骤已通过--forceExit确保测试进程不会残留。

内存使用日志如下:

Memory usage in megabytes:
8191
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0   2388   728 ?        Ss   13:33   0:00 /bin/sh -c exit $( (/usr/bin/mkfifo /opt/atlassian/pipelines/agent/tmp/build_result && /bin/cat /opt/atlassian/pipelines/agent/tmp/build_result) || /bin/echo 1)
root           7  0.0  0.0   2388    96 ?        S    13:33   0:00 /bin/sh -c exit $( (/usr/bin/mkfifo /opt/atlassian/pipelines/agent/tmp/build_result && /bin/cat /opt/atlassian/pipelines/agent/tmp/build_result) || /bin/echo 1)
root           8  0.0  0.0   2300   744 ?        S    13:33   0:00 /bin/cat /opt/atlassian/pipelines/agent/tmp/build_result
root          10  0.0  0.0   2388  1408 ?        Ss   13:34   0:00 /bin/sh /opt/atlassian/pipelines/agent/tmp/wrapperScript3495155942582447061.sh
root          42  0.0  0.0   2388   728 ?        S    13:35   0:00 /bin/sh /opt/atlassian/pipelines/agent/tmp/buildScript11364665287647037922.sh
root          43  0.0  0.0   3736  2928 ?        S    13:35   0:00 /bin/bash -i /opt/atlassian/pipelines/agent/tmp/bashScript12075457348243585276.sh
root          44  0.0  0.0   3736  2220 ?        S    13:35   0:00 /bin/bash -i /opt/atlassian/pipelines/agent/tmp/bashScript12075457348243585276.sh
root          45  0.4  0.0   3736  2360 ?        S    13:35   0:01 /bin/bash -i /opt/atlassian/pipelines/agent/tmp/bashScript12075457348243585276.sh
root         149  0.0  0.1 775412 54716 ?        Sl   13:35   0:00 node /opt/yarn-v1.22.19/bin/yarn.js build
root         178  0.0  0.0   2400   676 ?        S    13:35   0:00 /bin/sh -c node --max-old-space-size=4096 scripts/build.js
root         179 85.0 11.3 4457236 3684220 ?     Sl   13:35   5:05 /usr/local/bin/node --max-old-space-size=4096 scripts/build.js
root         274 44.9  4.0 1857172 1315684 ?     Sl   13:35   2:40 /usr/local/bin/node --max-old-space-size=2048 /opt/atlassian/pipelines/agent/build/node_modules/fork-ts-checker-webpack-plugin/lib/service.js
root        9856 16.8  0.8 798832 274212 ?       Sl   13:39   0:14 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root        9868 12.2  0.2 629752 92040 ?        Sl   13:39   0:10 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root        9887 11.3  0.5 712008 182288 ?       Sl   13:39   0:09 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root        9906 11.7  0.2 626048 89324 ?        Sl   13:39   0:10 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root        9921 52.0  4.9 2104068 1605920 ?     Rl   13:39   0:45 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root        9936 11.5  0.2 628400 93228 ?        Sl   13:39   0:10 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root        9955 23.2  2.1 1214696 695708 ?      Sl   13:39   0:20 /usr/local/bin/node --max-old-space-size=4096 /opt/atlassian/pipelines/agent/build/node_modules/terser-webpack-plugin/node_modules/jest-worker/build/workers/processChild.js
root       12683  0.0  0.0   2296   752 ?        S    13:41   0:00 sleep 0.1
root       12684  0.0  0.0   7640  2656 ?        R    13:41   0:00 ps -aux
Memory usage in megabytes:

问题解析与解决方案

为什么构建时会出现jest-worker?

别担心,terser-webpack-plugin根本没在运行测试。你看到的jest-worker是Jest团队抽离出来的通用多进程并行处理库,很多前端构建工具都会用它来实现并行任务、提升效率——这里它是用来并行压缩JS代码的,和测试完全没关系。

如何解决内存超限问题?

1. 限制terser的并发worker数量

默认情况下,terser会根据CPU核心数创建worker,Bitbucket容器的内存可能扛不住这么多进程。手动设置并发数:

const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        parallel: 2, // 按容器内存调整,比如1或2,避免过多进程抢占内存
      }),
    ],
  },
};

2. 给单个worker设置内存上限

每个worker默认继承主进程的内存配置,你可以单独给worker分配更小的内存:

new TerserPlugin({
  parallel: true,
  workerArgs: ['--max-old-space-size=1024'], // 每个worker最多用1G内存
}),

3. 禁用并行压缩(极端情况)

如果内存实在紧张,直接关掉并行,虽然构建会变慢,但能彻底避免内存问题:

new TerserPlugin({
  parallel: false,
}),

4. 升级Bitbucket Pipelines的实例规格

在bitbucket-pipelines.yml里指定更大内存的实例:

pipelines:
  default:
    - step:
        name: Build and Deploy
        size: 2x # 可选2x、4x等规格,根据团队权限选择
        script:
          - yarn build

内容的提问来源于stack exchange,提问作者Drew Gallagher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:22:04