【问题标题】:How can I improve socket hang up when connecting many devices?连接多个设备时如何改善套接字挂断?
【发布时间】:2018-12-22 02:43:46
【问题描述】:
  • 我正在测试在以下环境中将许多设备连接到 FIWARE。
  • 每个组件都部署在物理服务器上的容器中。

    +-------------------------------------------------+
    |Comet - Cygnus - Orion - IoTAgentJSON - Mosquitto| - device*N
    +-------------------------------------------------+
    
  • 在每个设备以1 msg/sec传输数据的情况下,当设备数量为350时,IoTAgent出现如下错误。(即350 msg/sec)

    {"log":"time=2018-12-16T14:57:24.810Z | lvl=ERROR | corr=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | trans=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | op=IoTAgentNGSI.NGSIService | srv=n/a | subsrv=n/a | msg=Error found executing update action in Context Broker: Error: socket hang up | comp=IoTAgent\n","stream":"stdout","time":"2018-12-16T14:57:24.81037597Z"}
    {"log":"time=2018-12-16T14:57:24.810Z | lvl=ERROR | corr=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | trans=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | op=IoTAgentNGSI.Alarms | srv=n/a | subsrv=n/a | msg=Raising [ORION-ALARM]: {\"code\":\"ECONNRESET\"} | comp=IoTAgent\n","stream":"stdout","time":"2018-12-16T14:57:24.810440213Z"}
    {"log":"time=2018-12-16T14:57:24.810Z | lvl=ERROR | corr=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | trans=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | op=IoTAgentJSON.MQTTBinding | srv=n/a | subsrv=n/a | msg=MEASURES-002: Couldn't send the updated values to the Context Broker due to an error: Error: socket hang up | comp=IoTAgent\n","stream":"stdout","time":"2018-12-16T14:57:24.810526916Z"}
    
  • 请求ps ax | grep contextBroker命令的结果如下。

    ps ax | grep contextBroker
    19766 ?        Ssl   29:02 /usr/bin/contextBroker -fg -multiservice -ngsiv1Autocast -dbhost mongodb-orion-demo -statCounters -statSemWait -statTiming
    

问题1:原因在哪里?物联网代理?还是猎户座?还是 MongoDB?还是内核参数?

  • Error found executing update action in Context Broker: Error: socket hang up 但 Orion 中没有显示错误日志。

问题2:如何提高FIWARE的处理性能?

问题3:IoT Agent上有批量操作吗?

【问题讨论】:

  • 您能否编辑您的问题帖子以添加 Orion 进程正在使用的参数?通常是ps ax | grep contextBroker 命令的结果。谢谢!
  • 我编辑了请求命令的结果并添加了它。谢谢你。 @fgalan
  • 如果还有其他必要的命令和信息请告诉我。
  • 当您设备的吞吐量为
  • 在一个小时的测试中,系统会正常运行,直到设备的吞吐量达到 320 tps。通过设备发送的消息是否在 Comet 中注册来判断系统是否正确运行。

标签: fiware fiware-orion


【解决方案1】:

很难提供正确的答案,因为性能取决于许多因素,特别是在涉及多个组件之间交互的复杂设置中。不过,我会尝试根据您提供的信息和我之前的经验提供一些想法和见解。

关于 Orion,我建议您查看 documentation on performance tunning。按照该页面中的指示,您可以提高组件的性能。

但是,话虽如此,我不认为 Orion 是您的问题的原因,基于:

  • 即使没有性能优化,Orion 通常也能达到大约 1,000 tps 的吞吐量。它应该可以毫无问题地应对 350 tps 的更新。
  • Orion 未显示错误日志。据我了解,您拥有的错误日志是由 IOTAgent 组件生成的。

因此,专注于 IOTA,也许使用 IOTA-UL 而不是 IOTA-JSON 会更好。 UL 编码比 JSON 编码更有效,因此您可以提高效率。此外,IOTA-UL 允许您发送多重测量(使用# 作为分隔符),我不知道它是否适合您的情况,但可以看作是有限形式的批量更新(有关更多详细信息,请参阅UL documentation)。

如果这不起作用,另一种可能性是使用其NGSIv2 API 将数据直接发送到 Orion。这将有几个优点:

  • 简化的设置(少了两个:MQTT 代理和 IOTAgent)
  • 在相同的资源条件下,Orion 原生性能通常高于 IOTAgents 性能(正如我之前提到的 ~1,000 tps 甚至在应用性能优化后甚至更高)
  • NGSIv2 API 提供批量更新操作(在上面引用的 NGSIv2 规范文档中查找 POST /v2/op/update

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2011-01-01
    • 1970-01-01
    • 2020-10-26
    • 2019-08-02
    • 2020-12-19
    • 2021-05-15
    • 2020-07-15
    • 2018-02-04
    相关资源
    最近更新 更多