7

我需要一些关于如何诊断慢速 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

然而,这是我从负载测试工具中看到的: 在此处输入图像描述

这是我的性能监控工具的统计数据。您可以清楚地看到尖峰和缓慢的异常值: 在此处输入图像描述

不知道从这里可以去哪里?我应该寻找其他一些指标吗?

4

1 回答 1

-1

只是为了清楚说明took(从弹性讨论中复制)中未包含的内容:

  • 在客户端将请求序列化为 JSON
  • 通过网络发送请求
  • 在服务器上反序列化来自 JSON 的请求
  • 在服务器上将响应序列化为 JSON
  • 通过网络发送响应
  • 在客户端反序列化来自 JSON 的响应

由于took非常低,因此查询或响应本身可能没什么坏处。此外,您从 Elasticsearch 发布的所有统计数据看起来都很棒。我想知道这可能是网络还是序列化中的什么?

PS:我认为这不是真的,您只需要通过API而不是配置文件来启用它。但由于你took的分数太低,你在这里找不到任何相关的东西。

注意:ElasticCloud = 没有慢日志

于 2019-02-27T00:46:15.863 回答