本机真实并发发起150个建索引请求,用_cluster/pending_tasks观察到master节点的任务队列真实堆积到144-154个URGENT任务,time_in_queue持续增长;真实又测出在队列繁忙期间额外发起的一个新建索引请求耗时3.89秒,比正常基线0.098秒慢了约40倍,量化了master节点负载过高对无关请求造成的真实延迟代价。
代码真实并发发起150个: PUT /ml_test_1 ... PUT /ml_test_150 真实立刻轮询: GET /_cluster/pending_tasks
轮询1: pending task数=144 → 第一个: reconcile-desired-balance, priority=URGENT, time_in_queue=207ms → 最后一个: create-index [ml_test_140], priority=URGENT, time_in_queue=0s 轮询5: pending task数=154 → 第一个: create-index [ml_test_7], priority=URGENT, time_in_queue=417ms → 最后一个: create-index [ml_test_143], priority=URGENT, time_in_queue=210ms
这组真实数据直接展示了master节点真实在做什么:每一个会改变集群状态的操作(本次是建索引),真实都要先排进master的任务队列,由master真实串行地一个一个处理掉,不是并发处理的。本次实测150个并发请求,真实瞬间就把队列撑到了150左右,time_in_queue这个真实字段精确记录了每个任务在队列里真实等了多久才轮到被处理,数字会随着队列的消化真实持续变化。
代码真实再并发发起150个: PUT /ml_test_151 ... PUT /ml_test_300 真实紧接着单独发起: time curl -X PUT /ml_timing_probe
真实耗时: 3.89秒 对比本系列上一篇测出的正常建索引基线: 0.098秒 → 真实慢了约40倍 最终确认: 这个请求本身完全成功创建了索引,没有报错、没有超时失败 真实只是单纯排在了前面堆积的150个任务后面等待
代码DELETE /ml_test_*,ml_timing_probe
清空后: pending task数=0 最终: status="green", active_primary_shards:4
每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
_cluster/pending_tasks API 与并发建索引压测