美文网首页
生产环境 Elasticsearch TimeoutExcep

生产环境 Elasticsearch TimeoutExcep

作者: fumingjiang | 来源:发表于2019-03-06 15:44 被阅读0次

    背景:

    生产环境有一个api 产品使用到Elasticsearch,根据需求,需要上线一个新功能,当新上线的代码从预发布切换到生产环境后,日志显示Elasticsearch操作异常,具体错误信息:

    ElasticsearchTimeoutException[java.util.concurrent.TimeoutException: Timeout waiting for task.]; nested: TimeoutException[Timeout waiting for task.];

            at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:71)

            at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:63)

            at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:69)

           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

            at java.lang.Thread.run(Thread.java:748)

    Caused by: java.util.concurrent.TimeoutException: Timeout waiting for task.

            at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.get(BaseFuture.java:232)

            at org.elasticsearch.common.util.concurrent.BaseFuture.get(BaseFuture.java:67)

            at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:69)

    引发报错的操作:

        Update Es 中一个index1 中的一条记录。

    排查过程:

    1.因为是上线一个新功能,初步怀疑是代码问题,但代码中ES工具类没有做改动,排除

    2.查看生产日志,发现报错elasticsearch EsRejectedExecutionException[rejected execution (queue capacity 1000),怀疑是队列数满了引起的等待超时,因为是update 操作,调整ES bulk 的queue大小,设置为1000,重新发布,未能解决,还是超时。

    3.查看es日志,没有发现ERROR级别日志,排除。

    4.代码屏蔽,把报错的index 相关操作的代码屏蔽掉,上线功能,还是报错。。。无语了。。。

    5.呼叫外援,冲天开始定位问题。查看es日志,发现

    [2019-03-05T21:28:41,220][INFO ][o.e.c.m.MetaDataMappingService] [node-3] [partneruser/ANfhxm12Qp61cApLZigiow] update_mapping [13281]

    [2019-03-05T21:28:58,299][INFO ][o.e.c.m.MetaDataMappingService] [node-3] [partneruser/ANfhxm12Qp61cApLZigiow] update_mapping [14901]

    Es master节点存在mapping 操作,耗时很久。重新查看代码,发现网es插入的信息中新增了一些字段,mapping 文件中并没有手动创建过这些字段,造成Es 在自动mapping。继续查看时间点,生产日志报错时间和es mapping 时间吻合。定位问题。

    解决方案:

    1。新增加的字段不写入Es.

    总结:

            生产环境es 配置建议

    1.关闭自动mapping 功能,方便定位问题。

    2.调整bulk queue大小,一般改成1000 基本够用

    相关文章

      网友评论

          本文标题:生产环境 Elasticsearch TimeoutExcep

          本文链接:https://www.haomeiwen.com/subject/deatpqtx.html