跟踪通过clearnet / Cloudflare / Apache的请求,以准确找出性能问题

问题描述 投票:4回答:1

我正在托管一个RESTful API,我的问题是,在一定时间后,每个第一个入站请求大约需要3秒,而正常情况下为~100ms。 我觉得最有趣的是它总是需要3100到3250毫秒左右,而不是更多而不是更少。所以对我来说似乎很有意思。 我已经调试了API,除了一件事之外,所有内容都会立即运行,这是我的API甚至开始接收请求之前的三秒延迟。 我最好的猜测是,在Apache或DNS解析中出现问题,但我不知道究竟是什么导致它(这就是我问这个问题的原因)。 我正在使用这样的Apache ProxyPass:

ProxyRequests off
Timeout 54
ProxyTimeout 5400
ProxyPass /jokeapi http://localhost:8079
ProxyPassReverse /jokeapi http://localhost:8079

我正在使用Cloudflare / APNIC DNS网关服务器1.1.1.10.0.0.0 此外,我的所有请求在到达我的网络之前都会通过Cloudflare SSL代理进行路由。 我甚至部分重写了API,因此它使用ReadStreams响应,而不是将文件加载到RAM中并立即提供服务,但这并没有解决问题。

我的问题是如何完全调试请求所需的路由,并准确查看这3秒延迟的来源。

谢谢! PS:服务器在NodeJS上运行

node.js apache rest proxy performance-testing
1个回答
0
投票

我认为密钥与网络活动无关,但在注意事项中,在一段时间的闲置活动之后,对API的第一次响应需要稍微超过3秒。我假设后续行动回到了100毫秒的窗口。

在使用localhost时,这不是路由问题。如果你愿意,你可以很容易地使用环回127.0.0.1来避免名称解析命中,但对保留主机名的这种命中将是微秒。

我怀疑RESTful函数的编译版本已经超出了系统的缓存范围。在一段非使用时间之后的第一次命中则需要重新编译,并且只要编译的指令被执行一段时间,它们将保持在高速缓存中并且继续在100ms范围内响应。在系统冷启动(设置初始条件)后,我们经常在多用户性能测试中观察到这种情况。在满负荷下达到时间之前,测试用户的加速用于重新编译公共代码。

另一个回击房屋网络端的项目,DNS超时和绑定缓存条目往往很长,通常是一天中的重要部分甚至更长。即便如此,DNS查找已超出绑定缓存的项目的几率也不会增加初始连接时间的三秒。

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