我有几个微服务正在连接到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中。
驱动程序不会独立于查询执行时间跟踪网络I / O时间。您可以尝试:
[如果您使用lib来记录request / response
或bunyan
之类的表达项目中的morgan
,则当表达中间件调用send()
,json()
或end()
时,当前请求响应时间为ms已记录,docs from morgan here。它可以使您快速了解整个请求/响应周期中的处理时序(包括数据库查询时序)。
如果在应用程序前面使用反向代理(nginx,apache或haproxy),则可以使用反向代理日志来了解处理快速申请的请求/响应之间的时间间隔。您可以使用该信息来更好地衡量处理请求的请求时间。
现在您可以在服务器内部处理请求。其余时间是客户端和服务器之间的延迟网络rtt。
要获取有关rtt的信息,您可以使用chrome dev tools
(使用网络标签)或某些请求/响应工具(如postman
,insomnia
或apache bench
)来提供有关ttl的信息。我没有任何工具可以推荐这将是最人性化的分析。也许它并不完美,但是如果值得继续研究,至少可以让您有所收获。