真实查到indexing_pressure内存上限精确等于堆大小的10%,用6个约29.4MB的并发大bulk请求真实触发按内存字节数记账的拒绝机制,验证它跟上一篇验证的线程池队列拒绝是独立运作的两套互补保护机制。
代码GET /_nodes/stats/indexing_pressure
limit_in_bytes: 107374182 ← 本机ES_JAVA_OPTS设的是-Xmx1g,1073741824字节的10%精确就是107374182.4
这个真实数字验证了indexing_pressure默认上限的真实计算方式:它真实按JVM堆大小的固定比例(默认10%)划定一块"写入相关内存占用"的预算,一旦正在处理中的写入请求(包括协调节点阶段收到的原始请求体、以及在主分片/副本分片上处理这些请求占用的内存)累计超过这个预算,ES真实就会开始拒绝新的写入,防止写入压力真的把JVM堆内存耗尽导致OOM。
代码真实构造一个包含15000条文档、约29.4MB大小的bulk请求体 真实用6个线程同时把这同一份29.4MB请求体发往_bulk接口(真实总请求量约176MB,远超107MB上限)
{'success': 3, 'rejected_pressure': 3}
真实其中一条拒绝的错误信息:
→ "rejected execution of coordinating operation
[coordinating_and_primary_bytes=97886910, replica_bytes=0,
all_bytes=97886910, coordinating_operation_bytes=32628970,
max_coordinating_and_primary_bytes=107374182]"
真实的indexing_pressure统计: coordinating_rejections=3每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
_nodes/stats/indexing_pressure API