拒绝的请求
编辑拒绝的请求
编辑当 Elasticsearch 拒绝请求时,它会停止操作并返回一个带有 429
响应代码的错误。拒绝的请求通常是由以下原因引起的
- 线程池耗尽。耗尽的
search
或write
线程池会返回TOO_MANY_REQUESTS
错误消息。 - 断路器错误。
- 超过
indexing_pressure.memory.limit
的高索引压力。
检查拒绝的任务
编辑要检查每个线程池的拒绝任务数量,请使用 cat 线程池 API。较高的 rejected
与 completed
任务比率,特别是在 search
和 write
线程池中,意味着 Elasticsearch 定期拒绝请求。
resp = client.cat.thread_pool( v=True, h="id,name,queue,active,rejected,completed", ) print(resp)
const response = await client.cat.threadPool({ v: "true", h: "id,name,queue,active,rejected,completed", }); console.log(response);
GET /_cat/thread_pool?v=true&h=id,name,queue,active,rejected,completed
write
线程池拒绝通常出现在错误的 API 和关联的日志中,显示为 EsRejectedExecutionException
,并带有 QueueResizingEsThreadPoolExecutor
或 queue capacity
。
这些错误通常与任务队列积压相关。
检查断路器
编辑resp = client.nodes.stats( metric="breaker", ) print(resp)
const response = await client.nodes.stats({ metric: "breaker", }); console.log(response);
GET /_nodes/stats/breaker
这些统计数据是从节点启动开始累积的。有关更多信息,请参阅 断路器错误。
检查索引压力
编辑resp = client.nodes.stats( human=True, filter_path="nodes.*.indexing_pressure", ) print(resp)
const response = await client.nodes.stats({ human: "true", filter_path: "nodes.*.indexing_pressure", }); console.log(response);
GET _nodes/stats?human&filter_path=nodes.*.indexing_pressure
这些统计数据是从节点启动开始累积的。
索引压力拒绝显示为 EsRejectedExecutionException
,并指示它们由于 coordinating_and_primary_bytes
、coordinating
、primary
或 replica
而被拒绝。
这些错误通常与任务队列积压、批量索引大小或摄取目标的 refresh_interval
设置相关。
防止拒绝请求
编辑修复高CPU和内存使用率
如果 Elasticsearch 定期拒绝请求和其他任务,则您的集群可能存在高 CPU 使用率或高 JVM 内存压力。有关提示,请参阅 高CPU使用率 和 高JVM内存压力。