ECONNRESET 在短时间内开启大量连接时
ECONNRESET when opening a large number of connection in small time period
我想在 Orion 上创建大量实体。我正在使用 docker 版本的 Orion 和 mongo 与此 docker-compose.
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 123456
之类的命令时,我无法知道该设置正在被 Orion 和 docker 容器接受。
Orion 的日志也是空的,当 Orion 在 docker 上 运行 时,我无法确定是什么导致了这个问题。
所以主要问题:
- docker 上的 Orion 运行 能否以与 VM 上的 Orion 运行 相同的方式使用(是否有一些回退)
- 以及当 Orion 在 docker 中 运行 时如何检查这个问题,因为我读了很多 docs/issues 但运气不好(或者我错过了什么)。
如果您有一些 advice/soultion,那将会很有帮助。
谢谢
{
"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 个实体,然后接下来的几个或更多 return 响应说 ECONNRESET 然后它再次开始创建等等。
让我感到困惑的是,它并没有完全失败,这意味着它可以工作,但没有按预期进行。此外,Orion 似乎关闭了套接字或将其挂起一段时间,然后他再次打开并正常创建等等。如果您需要更多信息,请询问,感谢您的快速回答。
为什么不使用
而不是为每个实体打开一个新连接
POST /v2/op/update
并在一批中创建所有实体?或几批
查看一些代码在
关于在 docker 中传递给 CB 运行 的 CLI 参数,使用 docker 撰写文件中的 command
行,例如:
command: -dbhost mongo -maxConnections 123456
但是,我不确定这是否有助于解决问题,因为 Orion 无需任何特殊定制即可处理您的用例。查看错误消息(这似乎与 TCP 层的一些问题有关)我想知道 docker 网络层是否在某种程度上成为瓶颈...
此外,Jose Manuel Cantera 关于使用 POST /v2/op/update
的建议是个好主意。这将减少网络层的连接压力,并可能有助于缓解问题。
如果您无法更改更新策略,或许使用请求间延迟 (100-200ms) 也有帮助。
我想在 Orion 上创建大量实体。我正在使用 docker 版本的 Orion 和 mongo 与此 docker-compose.
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 123456
之类的命令时,我无法知道该设置正在被 Orion 和 docker 容器接受。
Orion 的日志也是空的,当 Orion 在 docker 上 运行 时,我无法确定是什么导致了这个问题。
所以主要问题:
- docker 上的 Orion 运行 能否以与 VM 上的 Orion 运行 相同的方式使用(是否有一些回退)
- 以及当 Orion 在 docker 中 运行 时如何检查这个问题,因为我读了很多 docs/issues 但运气不好(或者我错过了什么)。
如果您有一些 advice/soultion,那将会很有帮助。 谢谢
{
"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 个实体,然后接下来的几个或更多 return 响应说 ECONNRESET 然后它再次开始创建等等。
让我感到困惑的是,它并没有完全失败,这意味着它可以工作,但没有按预期进行。此外,Orion 似乎关闭了套接字或将其挂起一段时间,然后他再次打开并正常创建等等。如果您需要更多信息,请询问,感谢您的快速回答。
为什么不使用
而不是为每个实体打开一个新连接POST /v2/op/update
并在一批中创建所有实体?或几批
查看一些代码在
关于在 docker 中传递给 CB 运行 的 CLI 参数,使用 docker 撰写文件中的 command
行,例如:
command: -dbhost mongo -maxConnections 123456
但是,我不确定这是否有助于解决问题,因为 Orion 无需任何特殊定制即可处理您的用例。查看错误消息(这似乎与 TCP 层的一些问题有关)我想知道 docker 网络层是否在某种程度上成为瓶颈...
此外,Jose Manuel Cantera 关于使用 POST /v2/op/update
的建议是个好主意。这将减少网络层的连接压力,并可能有助于缓解问题。
如果您无法更改更新策略,或许使用请求间延迟 (100-200ms) 也有帮助。