Angular CLI - ng serve - 来自节点进程的高 CPU 使用率
Posted
技术标签:
【中文标题】Angular CLI - ng serve - 来自节点进程的高 CPU 使用率【英文标题】:Angular CLI - ng serve - high cpu usage from node process 【发布时间】:2020-09-01 02:18:57 【问题描述】:我正在努力解决一个问题,即在本地运行任何 Angular 应用程序时,链接到 ng serve
的节点进程正在使用超过 100% 的 CPU 内核。
我现在的环境是:
Angular CLI:7.3.10 节点:11.15.0 操作系统:darwin x64 (Mac OS X Catalina 10.15.4) 角度:7.2.16
我遇到过很多关于此的帖子和问题,其中常见的解决方案似乎是针对 Mac OS 问题安装 fsevents
。
我尝试过的事情:
为node-gyp
安装 XCode 命令行工具以在安装后重建 fsevents
安装最新版本的fsevents
(2.1.3),因为旧版本被指定为 angular-cli (1.2.13) 的可选依赖项
使用不同的节点版本,尝试 12.13.0 并删除 node_modules 并进行全新安装。还尝试了最新的fevents版本
如果相关,我也使用nvm
试过npm rebuild
将我的一个应用程序从 Angular 7 升级到 9,在干净安装依赖项后仍然是相同的行为,确保安装 fsevents 并尝试最新版本
无论我尝试什么,我一直观察到 CPU 使用率很高,我发现它有时会上升 300-400%。
这确实阻碍了我的发展,我希望有人能提出一些我可以尝试的好主意。
如果做不到这一点,我想知道是否应该尝试完全卸载 node
,摆脱 nvm
并从头开始。
【问题讨论】:
我没有意识到 poll 是毫秒级的,我在 5 点完成了 - 这也导致我的 CPU 飙升 - 感谢更新 如果您自己找到答案,post it as an answer;不要将其编辑到您的问题中 【参考方案1】:看来我设法解决了这个问题: 删除 /node_module 并重新安装
在我的情况下,这有帮助 我在这里找到了建议: https://gitmemory.com/issue/angular/angular-cli/14748/501608887
【讨论】:
【参考方案2】:在 Angular 开发环境中;转译/编译会导致 CPU 峰值。如果这种情况发生得太频繁,您的系统就会出现问题。
有一些方法可以稍微缓解疼痛;
完全关闭文件更改检测/实时重新加载/自动编译ng serve --live-reload false
或 ng serve --no-live-reload
等,具体取决于您的 Angular CLI 版本
npm install fsevents
npm rebuild fsevents
npm serve
ng serve --poll [ms]
CPU 管理很棘手,这个问题可能有很多原因。这些只是与 Angular 开发密切相关的几种可能性。我希望这个答案能为遇到同样问题的人提供一些选择。
【讨论】:
在 Angular 9 项目中工作:安装 fsevents 可以让节点进程平静下来,否则节点进程会一直以约 60% 的 CPU 运行。现在我很少在活动监视器中看到它。如果使用 Node 14+,您可以安装 fsevents@2。 --poll 帮我做了 如果您使用的是 Apple Silicon,当前版本的 fsevents (2.2.1) 无法正常工作。请参阅:github.com/fsevents/fsevents/issues/349 了解解决方法。【参考方案3】:也许您在Docker
上为您的热/实时重新加载设置了类似的设置,例如ng serve --host 0.0.0.0 --poll 1
。 poll
值有问题,将其更改为更大的值,例如 2000
,例如 ng serve --host 0.0.0.0 --poll 2000
。
现在,您将失去(几乎)实时热/实时重新加载,但您将节省 CPU/电池,并在您的应用刷新更改的代码之前有 2 秒的延迟。
【讨论】:
【参考方案4】:经过大量挖掘,我发现以下选项对我很有效。在此之前,我每次遇到 javascript 堆内存不足的问题。尝试使用自定义节点内存,但注意对我有用,而不是低于一个。
ng serve --source-map=false
和
ng build --source-map=false
像魅力一样工作。
【讨论】:
【参考方案5】:如果您使用 Yarn 安装软件包,其锁定文件可能已锁定在旧版本的 fsevents
中,该版本在 Apple Silicon 上与 node-pre-gyp
存在已知问题。
https://github.com/nodejs/node-gyp/issues/2296
只需删除yarn.lock
,然后再次运行yarn
,应该会尝试安装不存在该问题的fsevents
依赖项的较新版本。
这适用于 Angular 11。
【讨论】:
以上是关于Angular CLI - ng serve - 来自节点进程的高 CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章
Angular CLI - ng serve - 来自节点进程的高 CPU 使用率
当我“ng serve”时,Angular CLI 给了我“TypeError: callbacks[i] is not a function”
使用ng serve 在Vs Code里调试 anguar 项目