被拒绝的请求

编辑

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

检查被拒绝的任务

编辑

要检查每个线程池被拒绝的任务数量,请使用 cat 线程池 API。特别是 searchwrite 线程池中,rejected 任务与 completed 任务的高比例意味着 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 内存压力高