[在Node.js中对MongoDB执行查询(使用猫鼬)时,如何测量联网时间?

问题描述 投票:0回答:2

我有几个微服务正在连接到MongoDB的单个实例。微服务位于Nodejs(express +猫鼬)中,所有内容均位于docker-compose文件中,并使用Docker-Swarm进行部署。我需要测量猫鼬模型的findOne方法(不是整个HTTP请求)执行时间的不同部分。当我测量总执行时间时,有时我甚至会得到高达250ms或400ms的值(系统中的高负载),有时甚至会获得10ms或25ms的值。但是当我在mongo(在NodeJS中)中使用explain时,它告诉我查询花费了0-3毫秒。我怀疑问题出在docker-swarm网络,但我不知道如何测量400ms的累积量。例如,我想知道花多少时间开始与mongo对话,反之亦然。

我想我可以使用tcpdump来查看跟踪及其时间戳(不确定是否可以使用)。我想我正在寻找更简单的东西,希望在Node.js中。

node.js mongodb docker mongoose database-performance
2个回答
0
投票

驱动程序不会独立于查询执行时间跟踪网络I / O时间。您可以尝试:

  • 检查服务器描述上的往返时间(这是平均水平,目的是消除延迟峰值)
  • 在服务器端启用查询日志记录,并查看是否提供定时信息

0
投票

[如果您使用lib来记录request / responsebunyan之类的表达项目中的morgan,则当表达中间件调用send()json()end()时,当前请求响应时间为ms已记录,docs from morgan here。它可以使您快速了解整个请求/响应周期中的处理时序(包括数据库查询时序)。

如果在应用程序前面使用反向代理(nginx,apache或haproxy),则可以使用反向代理日志来了解处理快速申请的请求/响应之间的时间间隔。您可以使用该信息来更好地衡量处理请求的请求时间。

现在您可以在服务器内部处理请求。其余时间是客户端和服务器之间的延迟网络rtt。

要获取有关rtt的信息,您可以使用chrome dev tools(使用网络标签)或某些请求/响应工具(如postmaninsomniaapache bench)来提供有关ttl的信息。我没有任何工具可以推荐这将是最人性化的分析。也许它并不完美,但是如果值得继续研究,至少可以让您有所收获。

© www.soinside.com 2019 - 2024. All rights reserved.