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 falseng 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 1poll 值有问题,将其更改为更大的值,例如 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 项目

错误,使用 ng-cli 运行 ng serve 时编译失败

ng serve 不会编译

运行 ng serve 时找不到模块“@angular/compiler”