nodejs REST Api的端到端分析

Posted

技术标签:

【中文标题】nodejs REST Api的端到端分析【英文标题】:End to end profiling of nodejs REST Api 【发布时间】:2018-02-19 17:31:45 【问题描述】:

我编写了一个 Nodejs api,它将使用 5000 个并发请求进行访问。 我已经使用 Jmeter 为 5000 个并发用户测试了 api。该 api 最初花费的时间很少,但在 1000 个请求之后,完成请求需要 2 秒。 api代码执行时间为400ms,按请求开始和结束的时间差计算。

有没有一种方法可以检查 API 请求在事件循环中等待其他请求完成的时间?有什么工具可以帮助对 API 进行端到端分析?

【问题讨论】:

我不明白这是什么意思:“Api 请求在事件循环中花费了多少时间等待其他请求完成”? 如果有大量并发请求,基本上我想找出阻塞事件循环或减慢 API 的代码块。那么有没有什么工具可以帮助我弄清楚 API 的完整跟踪和分析?目前托管代码的机器是具有 8GB RAM 的四核,我正在使用节点集群模块在所有内核中运行代码。所以 5000 个并发请求应该不是问题? 这完全取决于每个请求需要多少 CPU 时间,您是否可以在不增加延迟的情况下处理 5000 个并发请求,以及您是否对可能成为瓶颈的数据进行任何共享访问,而不管 CPU .我以前看过一些这样的工具来帮助描述这一点,但没有名字。仅供参考,仅要求 3rd 方工具在这里被认为是题外话。 【参考方案1】:

Node.js 支持使用 --prof 标志进行分析,参见例如https://nodejs.org/en/docs/guides/simple-profiling/(以及互联网上的许多其他文档和教程)。这并没有回答“这个特定请求做了什么或等待了什么?”,但它确实回答了“节点进程花时间在做什么?” -- 希望这两个问题都有相同的答案。

除此之外,我建议您简化设置以缩小发生的范围。如果您只在一个核心上运行(请求较少),问题是否仍然存在?如果减少并发请求的数量,问题是否仍然存在?在极端情况下,如果您串行发送请求,问题是否仍然存在?你越能简化事情,你就越容易知道发生了什么。

可能是您的实现泄漏了一些资源(内存、文件处理程序等),随着时间的推移使事情变得更慢。可能是 5000 个并发请求超出了您的四核处理能力。

【讨论】:

以上是关于nodejs REST Api的端到端分析的主要内容,如果未能解决你的问题,请参考以下文章

Web/J2EE 和客户端应用程序的端到端分析

nightwatch 基于Webdriver的端到端自动化测试框架

如何将跨微服务的端到端测试包含到多个持续交付管道中?

量角器给出错误的端到端测试

探索专有领域的端到端ASR解决之道

探索专有领域的端到端ASR解决之道