首页 > 编程问答 >Elastic python请求超时错误:池达到最大大小,不允许更多连接

Elastic python请求超时错误:池达到最大大小,不允许更多连接

时间:2024-08-01 05:34:44浏览次数:14  
标签:python http elasticsearch timeout

我正在使用 Elasticsearch python 模块。我正在尝试像这样建立到服务器的连接

es = Elasticsearch([config.endpoint],
                    api_key=config.key,
                    request_timeout=config.request_timeout )

服务器连接,然后我尝试执行丰富策略。

es.enrich.execute_policy(name=policy)

但它们都失败并出现此错误:

{'policy': 'enrich-1', 'status': 'failed', 'error': "Connection error caused by: ConnectionError(Connection error caused by: FullPoolError(HTTPConnectionPool(host='our.server.internal', port=9200): Pool reached maximum size and no more connections are allowed.))"}

如果我删除 request_timeout 参数,丰富尝试运行但显示超时。如果我把参数放回去,就会收到此错误。

为什么会发生这种情况?我尝试阅读 文档 但不清楚这些参数的实际作用。是否有地方详细说明了每个参数的具体作用?我尝试使用 connections_per_node=50 没有帮助,同样的错误。

我做错了什么?


错误信息“ConnectionError: ConnectionError: FullPoolError(HTTPConnectionPool(host='our.server.internal', port=9200): Pool reached maximum size and no more connections are allowed.)”表示的 Elasticsearch 客户端试图建立的连接比允许的数量更多。

这可能是由于几个原因造成的:

1. 连接未关闭: 可能正在打开 Elasticsearch 连接但没有正确关闭它们。这会导致连接池耗尽,因为旧连接保持打开状态,阻止了新连接的建立。

解决方案: 确保在使用完 Elasticsearch 连接后关闭它们。可以使用 with 语句来自动关闭连接:

with Elasticsearch([config.endpoint], api_key=config.key, request_timeout=config.request_timeout) as es:
    es.enrich.execute_policy(name=policy)

2. 连接池大小太小: 默认情况下,Elasticsearch 客户端的连接池大小有限。如果的应用程序发出大量并发请求,则连接池可能会耗尽。

解决方案: 可以通过在 Elasticsearch 构造函数中指定 maxsize 参数来增加连接池的大小:

es = Elasticsearch([config.endpoint],
                    api_key=config.key,
                    request_timeout=config.request_timeout,
                    maxsize=25)  # 将最大连接数增加到 25

3. Elasticsearch 服务器过载: 如果 Elasticsearch 服务器过载,它可能无法及时响应连接请求,从而导致客户端出现连接错误。

解决方案: 检查 Elasticsearch 服务器的运行状况并确保它有足够的资源来处理请求负载。可能需要优化 Elasticsearch 配置或升级服务器硬件。

4. connections_per_node 参数设置不正确: 尝试设置 connections_per_node 参数,但它没有生效,这可能是因为没有正确地将其传递给 Transport 类。

解决方案: 确保将 connections_per_node 参数传递给 Transport 类,如下所示:

from elasticsearch import Elasticsearch, Transport

transport = Transport([config.endpoint], api_key=config.key, connections_per_node=50)
es = Elasticsearch(transport=transport, request_timeout=config.request_timeout)

其他建议:

  • 使用调试日志记录来获取有关连接问题的更多信息。
  • 监控 Elasticsearch 服务器的连接指标以识别潜在的瓶颈。
  • 考虑使用异步 Elasticsearch 客户端(例如 elasticsearch-async )来提高应用程序的性能。

通过解决这些问题,应该能够解决“ConnectionError: FullPoolError”错误并使的应用程序可靠地连接到 Elasticsearch。

标签:python,http,elasticsearch,timeout
From: 78818387

相关文章

  • 使用 python 将 JSON 数据空值导入数据库。收到此错误 - 数据需要字符串或类似字节的
    我正在尝试使用python将JSON数据集导入到我的PostgreSQL数据库,但在尝试导入null值时会抛出错误。表的名称是Loan_info。我在python中尝试过此操作:-forfieldinloan_info:ifloan_info[field]in['Null','null',None]:......
  • Python 将脚本转换为 exe 并给出 PermissionError
    我有一个Python(Windows10)脚本,其功能之一是创建备份。这是函数:defcreate_backups(self,file:str,counter:int=None)->None:counter=counteror1res=self.re_obj.match(file)ifresisNoneorlen(res.groups())==0:back_file=......
  • conda update python 不会更新,但 conda update --all 会更新
    我正在尝试更新我的venv。这就是我看到的(base_test)>condaupdatepythonCollectingpackagemetadata(current_repodata.json):doneSolvingenvironment:done==>WARNING:Anewerversionofcondaexists.<==currentversion:4.10.3latestversion:24......
  • 如何使用 Selenium (python) 访问另一个影子根中影子根中的元素?
    我有以下代码和HTML结构(我不是这方面的专家)。我正在尝试抓取HTML代码末尾的96.00C元素,其路径是:Xpath://*[@id="_grid"]/set-class2/div2/text-binding//text()完整Xpath:/html/body/main/div/div3/div3/......
  • 在Python中,如何在一段时间内接受输入
    我正在尝试用Python制作一个蛇游戏,但不知道如何制作它,以便蛇在没有玩家输入的情况下继续移动,所以如果有人知道一个简单的方法来做到这一点,我需要在2秒后取消输入将不胜感激代码如下:importrandomimportsysplayerY=(1)playerX=(0)appleY=random.randint(1,10)appl......
  • 在Python中单步执行代码时是否可以引发异常
    当我在IDE(例如PyCharm)中单步执行代码时,我想转储函数的参数(以供以后使用,例如复制它)。计划的场景是在某处设置断点,然后引发异常(这不在我运行的代码中,这就是重点),并捕获它。代码应该如下所示:defexception_cathcher_decorator(func):try:returnfunc(*f_args,**f_k......
  • 解决python自动化操作异常处理的问题
    在python自动化领域,往往要用到pyautogui,pywin32等模块实现自动化操作。然而,这种自动化操作,本身具有一定的局限性,其中最主要的一个问题就是,一旦执行结果不按照脚本预设的来执行,往往会抛出异常,导致程序中断。解决这个问题,主要有这么几种思路:第一,每一次操作后分情况讨论。这种方......
  • Python爬虫入门03:用Urllib假装我们是浏览器
    文章目录引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块模拟浏览器请求使用Request方法添加请求头信息代码示例1.设置请求URL和请求头2.定义请求参数并转换为适当的格式3.使用Request方法封装请求4.发送请求并获取响应常用......
  • Apache HttpClient发送文件时中文名变问号
    使用ApacheHttpClient发送multipart/form-data,包含有中文名的文件,对方收到的文件名中文变成了问号解决方法:发送方需要设置mode为HttpMultipartMode.RFC6532发送端代码如下,其中关键行为builder.setMode(HttpMultipartMode.RFC6532);importorg.apache.http.HttpEntity;impor......
  • 请以零基础学Python 之 第二十讲 分组和贪婪匹配
    当我们处理字符串时,有时候需要根据特定的模式来分割或者提取信息。Python提供了强大的正则表达式库re,可以帮助我们实现这些复杂的字符串操作。本篇博客将介绍两个常用的正则表达式技巧:分组和贪婪匹配。分组(Grouping)在正则表达式中,分组是将多个模式单元组合为一个单元,以便......