有个人长的像洋葱,走着走着就哭了…….

es集群线程池队列异常

Elasticsearch | 作者 zhengcx98 | 发布于2021年01月05日 | 阅读数:1464

"search" : {
"threads" : 25,
"queue" : 1,
"active" : 2,
"rejected" : 0,
"largest" : 25,
"completed" : 5203144772
}
以上是集群中通过执行_nodes/stats拿到的其中一个节点的search线程池的状态,有些疑问:当前状态active的线程数为2,远小于threads的25,此时为什么会有queue=1呢,正常不是应该是线程池线程处理不过来的时候才会有任务进入队列吗?
已邀请:

JiangJibo - 喊我雷锋

赞同来自:

通用的线程池的实例化线程的策略:当queue满了,且线程数未达到上限,然后实例化新的线程。

pony_maggie - 公众号:犀牛饲养员的技术笔记

赞同来自:

有可能是这个状态吧。比如queue中间满了,线程在不断执行queue里的任务,任务和活动线程都再不断减少。

xiaoyanghapi - Elasticsearch 爱好者

赞同来自:

这个问题其实不是ES的问题,这个要看下ThreadPoolExecutor,在ES里边search线程池最小和最大设置是相同的,在执行任务的时候如果pool有空闲,不会进入队列,会直接执行,你描述这个问题的产生,主要是因为获取queue大小和获取active活跃线程分成了两个操作,当你取活跃线程的时候,队列里边的值可能已经没有了

要回复问题请先登录注册