gpt4 book ai didi

Node.js CPU占用率高,如何调试?

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:44 24 4
gpt4 key购买 nike

我有一个使用 Node.js + Express 3 + Jade 制作的应用程序,它使用 MySQL DB 和 node-mysql 模块。

应用程序由 PM2 启动和监控。

加载主页后,我发现 CPU 使用率非常高,如下图所示。

usage of CPU of App Node.js

起始页对 MySQL DB 执行了三个查询,但如果我使用 Json 对象而不是 MySQL 查询,似乎 CPU 使用率仍然太高。

有没有办法将CPU使用率跟踪到端点函数中,以了解CPU使用率高的原因?

最佳答案

感谢分析,我解决了 CPU 问题。

我尝试在端点函数的更多部分记录 CPU 使用情况,但这种方法没有帮助。对于每个需要获取 CPU 使用情况的人来说,这个脚本非常好: http://gist.github.com/bag-man/5570809

为了排除该问题与 MySQL 查询相关,我创建了一个仅执行查询的简单应用程序,并使用 ApacheBench 对其进行了测试。本次测试顺利通过。

之后我找到了解决方案。

Node.js 分析如下: https://nodejs.org/en/docs/guides/simple-profiling/

我使用内置分析器运行应用程序:

NODE_ENV=development node --prof app.js

我通过 ApacheBench 提出了一些请求

ab -k -c 20 -n 250 "http://localhost:8080/"

我生成了一个processed.txt

node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt

在总结中我得到了:

 [Summary]:
ticks total nonlib name
4036 22.6% 23.3% JavaScript
13130 73.6% 75.9% C++
1334 7.5% 7.7% GC
527 3.0% Shared libraries
144 0.8% Unaccounted

“自下而上(重)配置文件”都与 uglify-js 模块相关:

/node_modules/with/node_modules/uglify-js/lib/parse.js

查看依赖项,我发现该模块由 Jade 使用

我的应用程序执行了大量查询并生成一个大型 Json 对象,并将其传递给 Jade 模板引擎。

Jade 使用大量 CPU 来解析传递的大对象。

首先,我将该模块从 0.35.0 更新到 1.3.1(因为 pug 仍处于 alpha 版本)。

Jade 使用大量 CPU 来解析传递的大对象。

首先,我将该模块从 0.35.0 更新到 1.3.1(因为 pug 仍处于 alpha 版本)。

由于此更新,性能得到了提高。

但最后我计划加载页面而无需大量查询,并通过 REST 服务获取所需信息,而不将数据传递给 Jade

关于Node.js CPU占用率高,如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com