代码之家  ›  专栏  ›  技术社区  ›  RPM1984

如何跟踪慢速弹性搜索查询?

  •  0
  • RPM1984  · 技术社区  · 7 年前

    我需要一些关于如何诊断慢速弹性查询的建议。

    安装程序

    • ElasticCloud中的1个节点群集(1个主碎片,0个副本)。注意:elasticcloud=没有slowlog。(也是,我知道我应该有更多的节点..但这只是dev)
    • 使用Nest库通过我的azure.net Web应用与群集交互

    行为

    • 我的web服务器的大多数响应时间是50-80ms
    • 所有 查询 在es(例如take)中的时间是<5ms。
    • 我的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集群花了218ms来处理请求。但需要1毫秒。

    我怎样才能跟踪这个慢请求?显然这不是查询速度(因为take很低),所以它一定是集群中的某个东西。

    有什么建议吗?

    编辑

    以下是Kibana的一些数据,在15分钟的负载测试中我做了: enter image description here

    所以…根据我愚蠢的分析,那里没有什么不好的。

    • 搜索延迟/延迟很快(<5ms)
    • jvm堆看起来不错
    • CPU罚款
    • 无过量GC

    但我从我的负载测试工具中看到的是: enter image description here

    这是我的性能监视工具的统计数据。您可以清楚地看到峰值和慢速异常值: enter image description here

    不知道从这里还能去哪里?我还需要别的指标吗?

    0 回复  |  直到 7 年前
        1
  •  -1
  •   xeraa    7 年前

    只是想弄清楚 took (抄自 Elastic Discuss ):

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

    自从 太低了,查询或响应本身可能没什么问题。你在ElasticSearch上发布的所有数据看起来都很棒。我想知道这可能是网络还是序列化中的什么东西?

    注:我不认为这是真的,你只需要通过api而不是配置文件来启用它。但是自从你 太低了,你在这里找不到任何相关的东西。

    注意:elasticcloud=没有slowlog