如何解决运行JavaScript yarn test时笔记本卡顿的问题?
解决
yarn test占用全部CPU核心导致系统卡顿的问题 问题描述
运行yarn test时,Node.js会占满20个CPU核心,导致笔记本卡顿,甚至操作系统会终止Skype、MS Teams、Slack等Node.js/Electron应用。
- 操作系统:Ubuntu 22.04
- 内存:32 GB
- CPU:12th Gen Intel® Core™ i9-12900H × 20
解决方案
1. 限制测试框架的并发工作线程数
绝大多数JavaScript测试框架(如Jest、Mocha)都支持通过参数限制并发执行的线程数,直接控制Node.js占用的CPU核心:
- 临时运行时指定参数:
yarn test --maxWorkers=4(这里设置为4个核心,可根据需求调整) - 永久配置到package.json:修改
scripts中的test命令,例如:"scripts": { "test": "jest --maxWorkers=4" } - 也可以用百分比配置,比如
--maxWorkers=25%,自动基于CPU核心数计算(20核的话就是5个核心)
2. 系统级限制Node.js进程CPU使用率
用Ubuntu工具直接限制Node.js进程的CPU占用:
- 安装
cpulimit工具:sudo apt install cpulimit - 限制所有Node.js进程的CPU使用率为500%(对应5个核心):
cpulimit -e node -l 500 - 或者在运行测试时直接绑定限制:
cpulimit -l 500 -- yarn test
3. 调整Node.js全局线程池大小
Node.js默认线程池大小是4,部分场景下测试框架会突破这个限制,可通过环境变量强制设置:
- 运行测试时指定:
UV_THREADPOOL_SIZE=4 yarn test - 也可以将该环境变量添加到系统配置中,比如在
~/.bashrc或~/.zshrc中添加:export UV_THREADPOOL_SIZE=4
内容的提问来源于stack exchange,提问作者Oleksandr Bratashov
相关产品推荐
相关产品推荐

