执行search请求的线程池是:QueueResizingEsThreadPoolExecutor,使用的任务队列是:ResizableBlockingQueue。在默认配置下:任务队列的最大容量和最小容量都是1000,根据 little's law 调整任务队列的长度。而任务队列的调整需要和最大容量以及最小容量比较,但是这两个容量默认是相同的(maxCapacity等于minCapacity)
org.elasticsearch.common.util.concurrent.ResizableBlockingQueue#adjustCapacity
应该只有在配置文件里面将线程池任务队列最大/最小容量配置成不一样的参数大小,才能发挥这个队列长度的调整作用?不知道是否对不对?
org.elasticsearch.common.util.concurrent.ResizableBlockingQueue#adjustCapacity
if (optimalCapacity > capacity + adjustmentAmount) {
// adjust up
final int newCapacity = Math.min(maxCapacity, capacity + adjustmentAmount);
this.capacity = newCapacity;
return newCapacity;
} else if (optimalCapacity < capacity - adjustmentAmount) {
// adjust down
final int newCapacity = Math.max(minCapacity, capacity - adjustmentAmount);
this.capacity = newCapacity;
return newCapacity;
} else {
return this.capacity;
}
应该只有在配置文件里面将线程池任务队列最大/最小容量配置成不一样的参数大小,才能发挥这个队列长度的调整作用?不知道是否对不对?
1 个回复
hapjin
赞同来自:
QueueResizingEsThreadPoolExecutor线程池默认参数