拒绝的请求

编辑

当 Elasticsearch 拒绝请求时,它会停止操作并返回一个带有 429 响应代码的错误。拒绝的请求通常是由以下原因引起的

检查拒绝的任务

编辑

要检查每个线程池的拒绝任务数量,请使用 cat 线程池 API。较高的 rejectedcompleted 任务比率,特别是在 searchwrite 线程池中,意味着 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,并带有 QueueResizingEsThreadPoolExecutorqueue capacity

这些错误通常与任务队列积压相关。

检查断路器

编辑

要检查已触发的 断路器的数量,请使用 节点统计 API

resp = client.nodes.stats(
    metric="breaker",
)
print(resp)
const response = await client.nodes.stats({
  metric: "breaker",
});
console.log(response);
GET /_nodes/stats/breaker

这些统计数据是从节点启动开始累积的。有关更多信息,请参阅 断路器错误

检查索引压力

编辑

要检查索引压力拒绝的数量,请使用 节点统计 API

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_bytescoordinatingprimaryreplica 而被拒绝。

这些错误通常与任务队列积压批量索引大小或摄取目标的 refresh_interval 设置相关。

防止拒绝请求

编辑

修复高CPU和内存使用率

如果 Elasticsearch 定期拒绝请求和其他任务,则您的集群可能存在高 CPU 使用率或高 JVM 内存压力。有关提示,请参阅 高CPU使用率高JVM内存压力