当前位置: 首页 > 面试题库 >

在短时间内打开大量连接时的ECONNRESET

姬天逸
2023-03-14
问题内容

我遇到要在Orion上创建大量实体的情况。我正在此docker-compose中使用Orion和mongo的docker版本。

version: "3"
services:
  mongo:
    image: mongo:3.4
    volumes:
      - /data/docker-mongo/db:/data/db
      - /data/docker-mongo/log/mongodb.log:/var/log/mongodb/mongod.log
    command: --nojournal
  orion:
    image: fiware/orion
    volumes:
      - /data/docker-mongo/log/contextBroker.log:/tmp/contextBroker.log
    links:
      - mongo
    ports:
      - "1026:1026"
    command: -dbhost mongo

现在,当我想上传2000个实体时会出现问题(为每个实体打开新的连接,我知道可以做不同的操作,但现在是要求的),我成功创建了不超过600个(或更少的永远不完整的数量)的其余实体创建错误:

"error": {
            "errno": "ECONNRESET",
            "code": "ECONNRESET",
            "syscall": "read"
        },

因此,我认为此问题与Orion中的maxConnections,reqPoolSize等设置有关。但是在docker中,我无法找到Orion配置文件,我无法知道何时键入类似contextBroker -maxConnections 123456Orion和docker容器接受该设置的命令。

另外Orion的日志为空,当Orion在docker上运行时,我无法确定是什么导致了此问题。

所以主要问题:

  • 能否以与在VM上运行的Orion相同的方式使用在docker上运行的Orion(是否存在一些后备)
  • 以及Orion在docker中运行时如何检查此问题,因为我阅读了大量文档/问题,但没有运气(或者我错过了一些东西)。

如果您有任何建议/建议,那将会很有帮助。谢谢

{
"orion" : {
"version" : "1.13.0-next",
"uptime" : "2 d, 15 h, 46 m, 34 s",
"git_hash" : "ae72acf9e8eeaacaf4eb138f7de37bfee4514c6b",
"compile_time" : "Fri May 4 10:12:18 UTC 2018",
"compiled_by" : "root",
"compiled_in" : "1901fd6bb51a",
"release_date" : "Fri May 4 10:12:18 UTC 2018",
"doc" : "https://fiware-orion.readthedocs.org/en/master/"
}
}



{ Error: socket hang up
at createHangUpError (_http_client.js:313:15)
at Socket.socketOnEnd (_http_client.js:416:23)
at Socket.emit (events.js:187:15)
at endReadableNT (_stream_readable.js:1090:12)
at process._tickCallback (internal/process/next_tick.js:63:19) code: 'ECONNRESET' }


error:
{ Error: connect ECONNREFUSED ipofvirtualm:1026
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1174:14)
 errno: 'ECONNREFUSED',
 code: 'ECONNREFUSED',
 syscall: 'read',
 address: 'ipofvm',
 port: 1026 },

options:
{ method: 'POST',
 uri: 'http://ip:1026/v2/entities?options=keyValues',
 headers:
  { 'Fiware-Service': 'some service',
    'Fiware-ServicePath': 'some servicepath' },
 body:
  { id: 'F0B935',
    type: 'Transaction',
    refEmitter: 'F0B935',
    refReceiver: '7501JXG',
    refCapturer: 'testtdata',
    date: '12/12/2017 13:25',
    refTransferredResources: 'testtdata',
    transferredLoad: 92 },
 json: true,
 callback: [Function: RP$callback],
 transform: undefined,
 simple: true,
 resolveWithFullResponse: false,
 transform2xxOnly: false },

我正在使用请求承诺库进行呼叫,我尝试其他人也遇到了同样的问题。现在,由于我无法向您发送所有2000条回复,因此我将尝试描述一下。因此,当我开始发送此消息时,它就会表现出来。它先创建30个实体,然后再返回几个或更多个返回响应,提示ECONNRESET,然后再次创建,依此类推。

令我感到困惑的是,它并没有完全失败,这意味着它可以正常工作,但并没有达到预期的目的。同样,猎户座似乎关闭了插座或挂了一段时间,然后又重新打开并正常创建,依此类推。如果您需要更多信息,请询问,并感谢您的快速解答。


问题答案:

而不是为每个实体打开新的连接,为什么不使用

POST /v2/op/update

并在一批中创建所有实体?或几批

请参阅以下代码

https://github.com/Fiware/dataModels/blob/master/Weather/WeatherObserved/harvest/spain_weather_observed_harvest.py#L235



 类似资料:
  • HTML5 websockets是(并且已经有一段时间了)一个热门话题,因为它们优雅地支持实时服务器端推送。 我目前有一个使用Tomcat 7.0.30支持的websockets的工作应用程序,其中包括websocket支持。但是将其转移到生产环境中会产生问题。 打开的websocket连接加起来是否等于Web服务器可以同时处理的最大连接数?例如。Apache中的。 相反,单个浏览会话的webso

  • 问题内容: 我目前正在以内存模式测试H2 DB。我建立了一个连接 我想使用dbunit进行一些导入并设置dbUnits db连接 还有我想稍后查询的导入 所以我的问题是,在内存模式下,什么时候可以关闭连接?通常我会做这样的事情 但是在内存中,如果连接关闭,我会丢失数据吗?那么在我结束程序之前,它应该保持打开状态吗? 问题答案: 从H2文档中: 默认情况下,关闭与数据库的最后一个连接会关闭数据库。对

  • 当应用程序尝试打开与硬件HSM的连接时,收到CKR\U GENERAL\U错误。 详细的错误是: 有人能告诉我这个错误的原因吗?该应用程序与软件HSM配合良好。 H/W HSM详细信息: ProtectToolkit C密钥管理实用程序:4.2.0(甚至在4.3.0中试用过) 制造商:Eracom 硬件版本:66.00 固件版本:2.02

  • 问题内容: 更新:我只是检查了我使用的最新的JDBC jar,并且缺少地图/Linux/arm/libsqlitejdbc.so,可以通过从某个地方下载该文件来解决此问题吗?在任何地方都找不到。 编辑:问题似乎是这个,但是我不知道如何解决这个问题。 我正在尝试在树莓派上使用SQLite数据库。但是我无法使其正常工作。我得到下面发布的输出。我正在使用JDBC驱动程序。该代码在我的主计算机上工作正常。

  • 嘿,我正在使用Glassfish开源v4,我遇到了一个奇怪的问题。 我在管理控制台中定义了到Oracle 11g的JDBC连接池,并设置了: 初始和最小池大小:500 最大游泳池大小:1000 池大小调整数量::750 我已经为这个连接池创建了一个特定的用户。然而,有时当我检查数据库中打开的连接时,我发现有1000多个连接(我看到的最大连接数是1440个) 当发生这种情况时,任何查询尝试都会失败,

  • 我们使用PgBouncer作为基于spring的应用程序连接池的中间件。在应用程序中,我们使用HikariCP进行应用程序级连接池。 我们将HikariCP的值设置为一小时,将设置为30秒。