Memory management MQTT代理-CPU和内存使用过多
我有一个MQTT(MOSQUITO)服务运行在生产站点(托管在AWSEC2上)的docker容器中。在容器中运行它的原因是为了确保可移植性,因为我们在多个地方使用此服务 最近,我们观察到MQTT随着时间的推移开始消耗大量资源(CPU和内存),因此我们开始丢失通过QoS 1通过MQTT传输的信息。为解决此问题,已尝试以下方法: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代理使用的持久性文件
- 删除完整的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。