我有一个 ExpressJS node.js 应用程序在具有 4 个内核和 32GB 内存的 Windows Server 2016 VM 上的 IISNode 上运行。我可以为每个核心设置一个进程,因此我的应用程序运行了 4 个 node.exe。 Node 版本为 v6.10.3。
这是资源通常的样子:
我可以看到由于内存波动, Node 垃圾回收似乎正在发生。如屏幕截图所示,它通常会悬停在工作峰值以下。
不过,我正试图找出其中一个进程的 CPU 使用率飙升至 100% 的原因。每当发生这种情况时,我都被迫终止 node.exe,因为我的整个应用程序都停止了。它将停滞在 CPU 峰值,然后所有进一步的请求都在旋转。
- 什么会导致 node.exe 中的 CPU 使用率过高?如何将其锁定在 100%?这是因为垃圾收集停滞吗?
- 可以使用哪些工具来确定哪个 node.exe 停滞了,以便更好地调试我的应用程序?
- IISNode 是否应该充当负载平衡器并将所有请求委托(delegate)给另一个核心?
现在我被迫在计时器上回收我的应用程序池,以完全杀死所有工作 Node 进程并重新启动它们。这可以抑制应用程序长时间宕机。
我很感激任何见解!
最佳答案
我在 Windows 10 中遇到了同样的问题。打开任务管理器 > 进程 Nodejs:服务器端 JavaScript(32 位)正在使用 %70 CPU。我发现 article .
Microsoft Safety Scanner 发现了一个威胁(检测到威胁:MonitoringTool:Win32/MicTrayDebugger)并删除了(找到了 MonitoringTool:Win32/MicTrayDebugger 并删除了!),它修复了我。但我不确定:)
如果运行 Microsoft Safety Scanner,日志文件路径 C:\Windows\debug\msert.log
关于node.js - Node.exe 卡在 100% CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469054/