TeamCity与Jenkins中yarn install耗尽服务器CPU内存无法完成,求助原因
解决TeamCity/Jenkins中Yarn Install耗尽CPU内存的问题
我之前在Windows Server的CI环境里碰到过完全一样的情况——手动命令行跑yarn install秒完成,放到TeamCity/Jenkins里就直接把2核4G的机器资源占满,永远跑不完。后来排查出几个核心原因,你可以按顺序试试:
1. 优先排查Yarn版本兼容性
旧版本的Yarn 1.x(比如1.15.x及更早)在Windows CI环境下有并发调度的bug,尤其是资源有限的机器上,会无限制创建子进程导致CPU和内存被榨干。
- 解决办法:升级到Yarn 1.x的稳定版本(比如
1.22.19),或者直接切换到Yarn Berry(2.x+),后者对资源的管理更高效。 - CI脚本里可以先指定版本安装:
npm install -g yarn@1.22.19 yarn install
2. 限制Yarn的并发数
默认情况下Yarn会根据CPU核心数设置并发下载/安装的进程数,但2核的机器可能扛不住默认的并发量,尤其是CI环境本身还有其他进程在跑。
- 直接在CI的
yarn install命令里加参数限制并发:yarn install --network-concurrency 1 --non-interactive--network-concurrency 1强制单线程下载,--non-interactive避免CI环境下弹出交互提示。
3. 检查CI环境的用户权限与缓存路径
TeamCity/Jenkins的运行用户和你手动登录的用户权限、环境变量不一样,可能导致Yarn缓存目录无法正常读写,进而触发重复下载或异常进程。
- 显式指定一个有读写权限的缓存目录:
确保这个目录是CI运行用户能访问的,并且提前创建好。yarn config set cache-folder C:\CI-Yarn-Cache yarn install
4. 切换CI的执行环境
有些CI工具默认用PowerShell执行脚本,而Yarn在PowerShell环境下可能有额外的进程开销或兼容性问题。试试强制用CMD执行:
- TeamCity:选择「Command Line」runner,命令写
cmd /c yarn install --non-interactive --network-concurrency 1 - Jenkins:用
bat 'yarn install --non-interactive --network-concurrency 1'代替PowerShell脚本
5. 排查依赖的postinstall脚本
少数依赖包的postinstall脚本在CI环境下会触发无限循环或大量计算,但本地环境因为某些差异没触发。可以先禁用脚本排查:
yarn install --ignore-scripts
如果这个命令能正常完成,就逐个排查项目依赖里带postinstall的包,找到问题包后替换或调整配置。
验证步骤
先尝试最直接的yarn install --non-interactive --network-concurrency 1,如果能正常完成,再逐步调整并发数(比如改成2)或者升级Yarn版本,找到适合你机器的配置。
内容的提问来源于stack exchange,提问作者uozuAho
相关产品推荐
相关产品推荐

