我需要一些关于如何诊断慢速 Elasticseach 查询的建议。
设置
- ElasticCloud 中的 1 个节点集群(1 个主分片,0 个副本)。注意:ElasticCloud = 没有慢日志。(也是的,我知道我应该有更多节点..但这只是 DEV)
- 使用 NEST 库通过我的 Azure .NET Web App 与集群交互
行为
- 我的网络服务器的大多数响应时间是 50-80 毫秒
- ES 中的所有查询时间(例如已占用)均 < 5 毫秒。
- 我的 Web 服务器和 ElasticCloud 之间的网络延迟约为 15 毫秒
问题 - 有时,响应时间会在 100-200 毫秒之间跳跃,但花费的时间仍然是 1 毫秒。我也能够在本地复制这种行为(使用 ElasticSearch docker)。
这是我捕获的 Fiddler 的跟踪,这是我的应用程序对 Elasticsearch 的调用:
ClientConnected: 17:28:44.325
ClientBeginRequest: 17:34:34.953
GotRequestHeaders: 17:34:34.953
ClientDoneRequest: 17:34:34.953
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 17:34:27.538
FiddlerBeginRequest: 17:34:34.953
ServerGotRequest: 17:34:34.953
ServerBeginResponse: 17:34:35.171
GotResponseHeaders: 17:34:35.171
ServerDoneResponse: 17:34:35.172
ClientBeginResponse: 17:34:35.172
ClientDoneResponse: 17:34:35.178
所以,上面说 Elasticsearch 集群需要 218 毫秒来处理请求。但是花费了1ms。
我怎样才能跟踪这个缓慢的请求?显然不是查询速度的问题(因为 take 是低的),所以它一定是集群中的东西。
有什么建议吗?
编辑
这是来自 Kibana 的一些数据,在我进行的 15 分钟负载测试期间:
所以..根据我的菜鸟分析,那里没有什么不好的。
- 搜索延迟/延迟很快(< 5ms)
- JVM堆似乎很好
- CPU没问题
- 没有过多的GC
这是我的性能监控工具的统计数据。您可以清楚地看到尖峰和缓慢的异常值:
不知道从这里可以去哪里?我应该寻找其他一些指标吗?