Memory management MQTT代理-CPU和内存使用过多

Memory management MQTT代理-CPU和内存使用过多,memory-management,mqtt,cpu-usage,mosquitto,Memory Management,Mqtt,Cpu Usage,Mosquitto,我有一个MQTT(MOSQUITO)服务运行在生产站点(托管在AWSEC2上)的docker容器中。在容器中运行它的原因是为了确保可移植性,因为我们在多个地方使用此服务 最近,我们观察到MQTT随着时间的推移开始消耗大量资源(CPU和内存),因此我们开始丢失通过QoS 1通过MQTT传输的信息。为解决此问题,已尝试以下方法: 删除MQTT代理使用的持久性文件 删除完整的MQTT卷 重新启动容器 上述步骤似乎暂时有效,但并不能完全解决这个问题。我们还进一步增加了MQTT(EC2 CPU和内存)

我有一个MQTT(MOSQUITO)服务运行在生产站点(托管在AWSEC2上)的docker容器中。在容器中运行它的原因是为了确保可移植性,因为我们在多个地方使用此服务

最近,我们观察到MQTT随着时间的推移开始消耗大量资源(CPU和内存),因此我们开始丢失通过QoS 1通过MQTT传输的信息。为解决此问题,已尝试以下方法:

  • 删除MQTT代理使用的持久性文件
  • 删除完整的MQTT卷
  • 重新启动容器
上述步骤似乎暂时有效,但并不能完全解决这个问题。我们还进一步增加了MQTT(EC2 CPU和内存)的可用资源数量,但与上述步骤类似,它似乎只是将问题推后,而不是解决它

你能建议我们解决这个问题的方法吗?此外,如果有人能够就堆使用情况、主题、客户机、断开连接/连接等建议如何评测MQTT代理,这将非常有用

目前,我们使用以下MQTT配置文件:

# mount to /mosquitto/config/mosquitto.conf

# sys_interval 60

persistence true
persistence_location /mosquitto/data/

# This causes every change to trigger retained data save
autosave_interval 60
queue_qos0_messages true
store_clean_interval 20
max_queued_messages 100000
max_inflight_messages 10000
allow_anonymous false
password_file /etc/mosquitto/conf.d/passwd
acl_file /etc/mosquitto/conf.d/acl

connection_messages true
log_dest stdout

persistent_client_expiration 1h
注意:我们用来连接MQTT代理的客户机是用NodeJS和Python编写的。对于所有客户端,我们将clean session选项传递为
true

在MOSQUITO服务器上运行以下命令:
mosquitto--help

收到的答复是:

mosquitto version 1.4.12 (build date 2017-06-01 13:03:46+0000)

mosquitto is an MQTT v3.1.1/v3.1 broker.

我们需要更多地了解您的客户端配置文件,它们是否都有静态客户端ID,还是您随机生成它们?了解您正在运行的mosquitto版本可能也很有用没有一个客户端具有静态客户端ID,所有客户端都是动态的,但是启用clean session选项后,我们仍然需要知道您正在运行的mosquitto版本。根本原因可能是任何地方-docker、mosquitto bugs或config、OS config。我们已经测试了25年,并且已经看到了这一切。没有简单的解决办法,只能进行长期测试,例如。另一种方法是以10倍的速率运行10倍的客户端,例如使用模拟器,将测试时间减少100。我们需要了解更多关于您的客户端配置文件的信息,它们是否都有静态客户端ID,还是您随机生成的?了解您正在运行的mosquitto版本可能也很有用没有一个客户端具有静态客户端ID,所有客户端都是动态的,但是启用clean session选项后,我们仍然需要知道您正在运行的mosquitto版本。根本原因可能是任何地方-docker、mosquitto bugs或config、OS config。我们已经测试了25年,并且已经看到了这一切。没有简单的解决办法,只能进行长期测试,例如。一种替代方法是以10倍的速率运行10倍的客户机,例如使用模拟器,将测试时间减少100。